Merge server folder to root

This commit is contained in:
Jackzie 2025-04-16 15:58:30 -05:00
parent b89a0ab191
commit 6ed02cef31
4417 changed files with 25524 additions and 1 deletions

11
templates/about.html.hbs Normal file
View file

@ -0,0 +1,11 @@
{{#> layouts/main }}
<div class="content">
<h4>Credits</h4>
<ul>
<li><a href="https://www.flaticon.com/free-icons/default" title="default icons">Default icons created by kliwir art -
Flaticon</a></li>
<li><a href="https://webgradients.com/">https://webgradients.com/</a></li>
</ul>
</div>
{{/layouts/main}}

View file

@ -0,0 +1,67 @@
{{#> layouts/default body-class="has-background-white-ter login-bg" }}
<br><br>
<div class="container py-6" style="width:20%"> <!-- TODO: fix width on mobile -->
<h1 class="title is-1 has-text-centered">{{ meta.app_name }}</h1>
<div class="box is-radiusless">
<h4 class="title is-4 has-text-centered">Forgot Password</h4>
<p class="subtitle is-6 mt-2 has-text-centered">An email will be sent to reset your password</p>
{{#if email_available }}
{{#unless (eq (len form.form_errors) 0) }}
<div class="notification is-danger is-light">
<b>Failed with errors:</b>
<ul>
{{#each form.form_errors}}
<li>{{msg}}</li>
{{/each}}
</ul>
</div>
{{/unless}}
{{#if success }}
<div class="notification is-success is-light">
An email has been sent if an account exists with that email address.
</div>
{{/if}}
<form method="post" action="/auth/login?return_to={{return_to}}">
<input type="hidden" name="_csrf" value="{{ csrf_token }}">
<div class="field">
<div class="control has-icons-left">
<input required name="email" class="input {{#if errors.email}}is-danger{{/if}}" type="email" placeholder="Email">
<span class="icon is-small is-left">
<i class="fas fa-envelope"></i>
</span>
</div>
{{#if errors.email }}
<p class="help is-danger">{{errors.email}}</p>
{{/if}}
</div>
<hr>
<div class="buttons">
<button class="button is-link is-fullwidth" type="submit" >Submit</button>
</div>
</form>
{{else}}
<div class="notification is-warning is-light">
Email support is unavailable, please contact an administrator to reset your password.
</div>
{{/if}}
<br>
<span>
<a href="/auth/login">Login</a>
{{#if can_register}}
| <a href="/auth/register">Register</a>{{/if}}
</span>
<div class="field is-pulled-right">
<div class="control">
<div class="select is-small">
<select>
<option selected value="en-us">English</option>
</select>
</div>
</div>
</div>
</div>
<p>Powered by <b><a href="{{meta.repo_url}}">{{ meta.app_name }}</a></b> v{{meta.app_version}}</p>
</div>
{{/layouts/default}}

View file

@ -0,0 +1,83 @@
{{#> layouts/default body-class="has-background-white-ter login-bg" }}
<br><br>
<div class="container py-6" style="width:20%"> <!-- TODO: fix width on mobile -->
<h1 class="title is-1 has-text-centered">{{ meta.app_name }}</h1>
<div class="box is-radiusless">
<h4 class="title is-4 has-text-centered">Login</h4>
{{#unless (eq (len form.form_errors) 0) }}
<div class="notification is-danger is-light">
<b>Login failed with errors:</b>
<ul>
{{#each form.form_errors}}
<li>{{msg}}</li>
{{/each}}
</ul>
</div>
{{/unless}}
{{#if logged_out }}
<div class="notification is-success is-light">
You have been logged out successfully.
</div>
{{/if}}
<form method="post" action="/auth/login?return_to={{return_to}}">
<input type="hidden" name="_csrf" value="{{ csrf_token }}">
<div class="field">
<label class="label">Username / Email</label>
<div class="control has-icons-left">
<input required name="username" class="input {{#if errors.username}}is-danger{{/if}}" type="text" placeholder="Username or Email">
<span class="icon is-small is-left">
<i class="fas fa-user"></i>
</span>
</div>
{{#if errors.username }}
<p class="help is-danger">{{errors.username}}</p>
{{/if}}
</div>
<div class="field">
<label class="label">Password</label>
<div class="control has-icons-left">
<input required name="password" class="input {{#if errors.password}}is-danger{{/if}}" type="password" placeholder="hunter2">
<span class="icon is-small is-left">
<i class="fas fa-key"></i>
</span>
</div>
{{#if errors.username }}
<p class="help is-danger">{{errors.password}}</p>
{{/if}}
</div>
{{!-- TODO: Not implemented --}}
{{!-- <div class="field">
<div class="control">
<label class="checkbox">
<input name="remember_me" type="checkbox">
Remember Me</a>
</label>
</div>
</div> --}}
<hr>
<div class="buttons">
<button class="button is-link is-fullwidth" type="submit" >Login</button>
{{#if sso_enabled}}
<a href="/login/sso" class="button is-fullwidth">Login with SSO</a>
{{/if}}
</div>
</form>
<br>
<span>
{{#if can_register}}
<a href="/auth/register">Register</a>
| {{/if}}<a href="/auth/forgot-password">Forgot password?</a>
</span>
<div class="field is-pulled-right">
<div class="control">
<div class="select is-small">
<select>
<option selected value="en-us">English</option>
</select>
</div>
</div>
</div>
</div>
<p>Powered by <b><a href="{{meta.repo_url}}">{{ meta.app_name }}</a></b> v{{meta.app_version}}</p>
</div>
{{/layouts/default}}

View file

@ -0,0 +1,71 @@
{{#> layouts/default body-class="has-background-white-ter login-bg" }}
<br><br>
<div class="container py-6" style="width:20%"> <!-- TODO: fix width on mobile -->
<h1 class="title is-1 has-text-centered">{{ meta.app_name }}</h1>
<div class="box is-radiusless">
<h4 class="title is-4 has-text-centered">Register</h4>
{{#if can_register }}
<form method="post" action="/auth/register">
<input type="hidden" name="_csrf" value="{{ csrf_token }}">
<div class="field">
<label class="label">Username</label>
<div class="control has-icons-left">
<input required name="username" class="input" type="text" placeholder="Username">
<span class="icon is-small is-left">
<i class="fas fa-user"></i>
</span>
</div>
</div>
<div class="field">
<label class="label">Email</label>
<div class="control has-icons-left">
<input required name="username" class="input" type="email" placeholder="Email">
<span class="icon is-small is-left">
<i class="fas fa-email"></i>
</span>
</div>
</div>
<div class="field">
<label class="label">Password</label>
<div class="control has-icons-left">
<input required name="password" class="input" type="password" placeholder="hunter2">
<span class="icon is-small is-left">
<i class="fas fa-key"></i>
</span>
</div>
</div>
<div class="field">
<label class="label">Password (confirm)</label>
<div class="control has-icons-left">
<input required name="password" class="input" type="password" placeholder="hunter2">
<span class="icon is-small is-left">
<i class="fas fa-key"></i>
</span>
</div>
</div>
<hr>
<div class="buttons">
<button class="button is-link is-fullwidth" type="submit" >Register</button>
</div>
</form>
{{else}}
<div class="notification is-danger is-light">
<p><i class="fas fa-xmark"></i> Registration has been disabled</p>
</div>
{{/if}}
<span>
<a href="/auth/login">Login</a>
</span>
<div class="field is-pulled-right">
<div class="control">
<div class="select is-small">
<select>
<option selected value="en-us">English</option>
</select>
</div>
</div>
</div>
</div>
<p>Powered by <b><a href="{{meta.repo_url}}">{{ meta.app_name }}</a></b> v{{meta.app_version}}</p>
</div>
{{/layouts/default}}

View file

@ -0,0 +1,12 @@
{{#> layouts/default body-class="has-background-white-ter login-bg" }}
<br><br>
<div class="container py-6" style="width:20%"> <!-- TODO: fix width on mobile -->
<h1 class="title is-1 has-text-centered">storage-app</h1>
<div class="box is-radiusless">
<h4 class="title is-4 has-text-centered">404 Page Not Found</h4>
<p>The requested resource <code>{{ path }}</code> can't be found</p>
<br>
<p><a href="/">Return home</a></p>
</div>
</div>
{{/layouts/default}}

36
templates/index.html.hbs Normal file
View file

@ -0,0 +1,36 @@
{{#> layouts/main }}
<div class="">
<h4 class="title is-4 is-inline">Libraries</h4>
<div class="is-pulled-right is-inline-block">
<div class="buttons">
<div class="button is-small">
Display
</div>
<div class="button is-small">
Sort
</div>
</div>
</div>
<hr class="my-2">
<table class="table is-fullwidth">
<thead>
<tr>
<td>Name </td>
<td>Size </td>
<td>Last Updated </td>
<td>Owner </td>
</tr>
</thead>
<tbody>
<tr>
<td class="px-4 py-4">
<a href="/library/dbabbf7d-9b63-487b-9908-57c2df11b2d2/My Library/">My Library</a>
</td>
<td></td>
<td></td>
<td>Me</td>
</tr>
</tbody>
</table>
</div>
{{/layouts/main}}

View file

@ -0,0 +1,20 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="/static/favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>storage-app</title>
<!-- TODO: use static -->
<link href="/static/css/main.css" rel="stylesheet" />
<link rel="stylesheet" href="/static/css/bulma.min.css">
<link href="/static/icons/css/fontawesome.css" rel="stylesheet" />
<link href="/static/icons/css/solid.css" rel="stylesheet" />
<link href="/static/icons/css/regular.css" rel="stylesheet" />
<link href="/static/icons/css/brands.css" rel="stylesheet" />
</head>
<body class="{{body-class}}">
{{> @partial-block }}
</body>
</html>

View file

@ -0,0 +1,11 @@
{{#> layouts/default }}
{{> partials/nav }}
<div class="mx-3 columns" style="height: 100%">
<div class="column pl-0 sidebar-column">
{{> partials/sidebar }}
</div>
<div class="column is-10">
{{> @partial-block }}
</div>
</div>
{{/layouts/default}}

View file

@ -0,0 +1,82 @@
{{#> layouts/main }}
<div class="">
<nav class="breadcrumb is-inline-block is-size-5 mb-0" aria-label="breadcrumbs">
<ul>
<li><a class="has-text-black" href="/library/{{library.id}}/{{library.name}}/">{{ library.name }}</a></li>
{{#each path_segments}}
<li>
<a class="has-text-black" href="/library/{{../library.id}}/{{../library.name}}/{{path}}" aria-current="page"> {{ segment }} </a>
</li>
{{/each}}
<div class="button is-small">
+
</div>
</ul>
</nav>
<div class="is-pulled-right is-inline-block">
<div class="buttons">
<div class="button is-small">
Display
</div>
<div class="button is-small">
Sort
</div>
<div class="button is-small">
Info
</div>
<div class="button is-small">
...
</div>
</div>
</div>
<hr class="my-2">
<table class="table is-fullwidth">
<thead>
<tr class="file-list">
<td style="width:0"><input type="checkbox" /></td>
<td style="width:0"></td>
<td style="width:0"></td>
<td>Name </td>
<td>Size </td>
<td>Last Updated </td>
<td>Owner </td>
</tr>
</thead>
<tbody>
{{#each files }}
<tr class="file-list">
<td><input type="checkbox" /></td>
<td>
<a class="has-text-black">
<span class="icon is-large">
<i class="fas fa-star fa-xl"></i>
</span>
</a>
</td>
<td class="filecell-icon">
<span class="icon is-large">
{{#if (eq type "folder") }}
<i class="fas fa-folder fa-xl"></i>
{{/if}}
{{#if (eq type "file") }}
<i class="fas fa-file fa-xl"></i>
{{/if}}
</span>
</td>
<td class="filecell-label pl-4">
{{#if (eq type "folder")}}
<a href="{{../parent}}{{ path }}">{{ path }}/</a>
{{/if}}
{{#if (eq type "file") }}
<a target="_blank" href="/file/{{../library.id}}/{{../parent}}{{ path }}">{{ path }}</a>
{{/if}}
</td>
<td>{{ bytes size }}</td>
<td>{{ updated }}</td>
<td>Me</td>
</tr>
{{/each}}
</tbody>
</table>
</div>
{{/layouts/main}}

View file

@ -0,0 +1,8 @@
<nav class="breadcrumb" aria-label="breadcrumbs">
<ul>
<li><a href="#">Bulma</a></li>
<li><a href="#">Documentation</a></li>
<li><a href="#">Components</a></li>
<li class="is-active"><a href="#" aria-current="page">Breadcrumb</a></li>
</ul>
</nav>

View file

@ -0,0 +1,68 @@
<nav class="navbar mb-4 has-background-white-ter" aria-label="main navigation">
<div class="navbar-brand">
<a class="navbar-item" href="/">
<h3 class="title is-3">storage-app</h3>
</a>
<button class="navbar-burger" aria-label="menu" aria-expanded="false">
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
</button>
</div>
<div class="navbar-start">
</div>
<div class="navbar-end">
{{#if session.user }} <!-- TODO: only show w/ route is library/files -->
<div class="navbar-item" style="width:300px">
<div class="field" style="width:100%" >
<p class="control has-icons-left">
<input class="input is-small" type="search" placeholder="Search files (CTRL + K)"></input>
<span class="icon is-small is-left">
<i class="fa-solid fa-magnifying-glass"></i>
</span>
</p>
</div>
</div>
{{/if}}
{{#if session.user }}
<div class="navbar-item">
<a class="icon has-text-black">
<i class="far fa-bell"></i>
<span class="ml-2" >0</span>
</a>
</div>
<div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link">
<img src="/static/img/default_user.png" alt="User Image" />
{{ session.user.name }}
</a>
<div class="navbar-dropdown mr-4 is-right is-radiusless">
<div class="dropdown-content">
<div class="navbar-item">
{{ session.user.username }}
</div>
<div class="navbar-item">
{{ session.user.email }}
</div>
<hr class="navbar-divider">
<a class="navbar-item" href="/settings">
<i class="fa fa-cog"></i>Settings
</a>
<a class="navbar-item" href="/admin">
<i class="fa fa-star"></i> Admin Panel
</a>
<hr class="navbar-divider">
<a class="navbar-item has-text-danger" href="/auth/logout">
<i class="fa fa-square-up-right"></i>Logout
</a>
</div>
</div>
</div>
{{/if}}
</div>
</nav>

View file

@ -0,0 +1,13 @@
<aside class="sidebar pl-0 mb-0">
<p class="sidebar-header">Workspace</p>
<ul class="sidebar-list">
<li class="{{is-active-exact route '/'}} {{is-active route '/library'}}"><a href="/"><i class="fa fa-file"></i> Files</a></li>
<li class="{{is-active route '/favorites'}}"><a href="/favorites"><i class="fas fa-heart"></i> Favorites</a></li>
<li class="{{is-active route '/activity'}}"><a href="/activity"><i class="fas fa-clock"></i> Activities</a></li>
</ul>
<p class="sidebar-header">Help</p>
<ul class="sidebar-list">
<li class="{{is-active-exact route '/help'}}"><a href="/help">Help</a></li>
<li class="{{is-active route '/help/about'}}"><a href="/help/about">About</a></li>
</ul>
</aside>