247 lines
14 KiB
HTML
247 lines
14 KiB
HTML
<!doctype html>
|
||
<html lang="en">
|
||
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||
<meta name="color-scheme" content="dark light">
|
||
<title>RustPad</title>
|
||
__APP_THEME_BOOTSTRAP__
|
||
__APP_STYLESHEET__
|
||
__APP_IMPORT_MAP__
|
||
__APP_ENTRYPOINT__
|
||
</head>
|
||
|
||
<body class="home-page" data-registration-enabled="__REGISTRATION_ENABLED__">
|
||
<header class="site-header home-header"><a class="brand home-brand" href="/">RustPad</a><div class="header-preferences" data-header-preferences></div></header>
|
||
<main class="home-layout home-layout--wide">
|
||
<section class="home-intro">
|
||
<h1>Write. Share. Collaborate.</h1>
|
||
<p>Create a standalone note or organize multiple notes in a workspace.</p>
|
||
</section>
|
||
|
||
<div class="create-grid">
|
||
<section class="panel create-panel">
|
||
<div class="create-panel__heading">
|
||
<h2>Note</h2>
|
||
<p>A single document with its own link.</p>
|
||
</div>
|
||
<form id="pad-form" novalidate>
|
||
<div class="field">
|
||
<label for="pad-name">Note name</label>
|
||
<input id="pad-name" maxlength="80" required autocomplete="off" placeholder="Meeting notes">
|
||
<div class="field-meta"><span id="pad-slug-preview">/p/note</span><span id="pad-name-count">0/80</span>
|
||
</div>
|
||
</div>
|
||
<div class="field">
|
||
<div class="label-row"><label for="pad-password">Password</label><span>optional, min. 8 characters</span>
|
||
</div>
|
||
<div class="password-input"><input id="pad-password" type="password" maxlength="128"
|
||
autocomplete="new-password" placeholder="Note password"><button class="text-button password-toggle"
|
||
type="button" data-target="pad-password">Show</button></div>
|
||
</div>
|
||
<p id="pad-error" class="form-message error" role="alert"></p>
|
||
<button id="pad-button" class="primary-button" type="submit">Create note</button>
|
||
</form>
|
||
</section>
|
||
|
||
<section class="panel create-panel">
|
||
<div class="create-panel__heading">
|
||
<h2>Workspace</h2>
|
||
<p>A workspace containing multiple notes.</p>
|
||
</div>
|
||
<form id="workspace-form" novalidate>
|
||
<div class="field">
|
||
<label for="workspace-name">Workspace name</label>
|
||
<input id="workspace-name" maxlength="80" required autocomplete="off" placeholder="My project">
|
||
<div class="field-meta"><span id="workspace-slug-preview">/w/workspace</span><span
|
||
id="workspace-name-count">0/80</span></div>
|
||
</div>
|
||
<div class="field">
|
||
<div class="label-row"><label for="workspace-password">Password</label><span>optional, min. 8
|
||
characters</span></div>
|
||
<div class="password-input"><input id="workspace-password" type="password" maxlength="128"
|
||
autocomplete="new-password" placeholder="Workspace password"><button class="text-button password-toggle"
|
||
type="button" data-target="workspace-password">Show</button></div>
|
||
</div>
|
||
<p id="workspace-error" class="form-message error" role="alert"></p>
|
||
<button id="workspace-button" class="primary-button" type="submit">Create workspace</button>
|
||
</form>
|
||
</section>
|
||
</div>
|
||
</main>
|
||
|
||
<footer class="home-footer">
|
||
<div class="home-footer__inner">
|
||
<div id="footer-account-guest" class="home-footer__account">
|
||
<button id="footer-login" class="footer-action footer-action--primary" type="button">Log in</button>
|
||
<button id="footer-register" class="footer-action footer-action--primary" type="button">Register</button>
|
||
</div>
|
||
<div id="footer-account-user" class="home-footer__account" hidden>
|
||
<span id="footer-user-label" class="home-footer__user">
|
||
<span class="home-footer__user-primary" data-account-primary></span>
|
||
<small class="home-footer__user-secondary" data-account-secondary hidden></small>
|
||
</span>
|
||
<button id="footer-resources" class="footer-action footer-action--primary" type="button">My notes</button>
|
||
<button id="footer-profile" class="footer-action" type="button">Profile</button>
|
||
<button id="footer-logout" class="footer-action" type="button">Log out</button>
|
||
</div>
|
||
<button id="footer-about" class="footer-action home-footer__about" type="button">About</button>
|
||
</div>
|
||
</footer>
|
||
|
||
<dialog id="about-dialog" class="app-dialog">
|
||
<div class="dialog-panel identity-panel about-panel">
|
||
<button id="close-about" class="modal-close" type="button" aria-label="Close dialog">×</button>
|
||
<header class="identity-panel__header">
|
||
<h2>About</h2>
|
||
<p class="dialog-copy">RustPad project information and licensing.</p>
|
||
</header>
|
||
<div class="about-content">
|
||
<p><strong>Author <br>Mateusz Gruszczynski </strong><br><a href="https://www.linuxiarz.pl" rel="author noopener"
|
||
target="_blank">@linuxiarz.pl</a></p>
|
||
<p><strong>Git repository</strong><br><a href="https://git.linuxiarz.pl/gru/rustpad" rel="noopener"
|
||
target="_blank">https://git.linuxiarz.pl/gru/rustpad</a></p>
|
||
<div class="about-license">
|
||
<strong>Licence</strong>
|
||
<p>Copyright (C) 2026 Mateusz Gruszczyński @linuxiarz.pl</p>
|
||
<p>This software is available under GNU GPLv3, which also permits commercial use provided that its terms are
|
||
followed.</p>
|
||
<p><strong>COMMERCIAL LICENSING NOTICE:</strong> If you want to distribute this software or a derivative work as
|
||
part of a proprietary (closed-source) product without the obligations imposed by GPLv3, contact us about a
|
||
separate commercial license. <br>Contact: linuxiarz<at>linuxiarz.pl</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</dialog>
|
||
|
||
<dialog id="identity-dialog" class="app-dialog">
|
||
<form id="identity-form" autocomplete="on" class="dialog-panel identity-panel">
|
||
<button id="close-identity" class="modal-close" type="button" aria-label="Close dialog">×</button>
|
||
<header class="identity-panel__header">
|
||
<h2 id="identity-title">Log in</h2>
|
||
<p id="identity-copy" class="dialog-copy"></p>
|
||
</header>
|
||
<div class="identity-fields">
|
||
<label>Nickname<input id="nickname" name="nickname" maxlength="40" autocomplete="off" data-bwignore="true"
|
||
placeholder="Your nickname"></label>
|
||
<label id="auth-email-field"><span id="auth-email-label">E-mail</span><input id="auth-email" name="username"
|
||
type="email" maxlength="320" autocomplete="username" required placeholder="you@example.com"></label>
|
||
<label>Password<input id="auth-password" name="password" type="password" minlength="8" maxlength="128"
|
||
autocomplete="current-password" required placeholder="At least 8 characters"></label>
|
||
</div>
|
||
<button id="auth-submit" class="primary-button" type="submit">Log in</button>
|
||
<div class="identity-links">
|
||
<button id="show-reset" class="text-button" type="button">Forgot password?</button>
|
||
<button id="auth-switch-mode" class="text-button" type="button">Create an account</button>
|
||
<button id="reset-back" class="text-button" type="button" hidden>Back to log in</button>
|
||
</div>
|
||
<p id="identity-error" class="form-message" role="status"></p>
|
||
</form>
|
||
</dialog>
|
||
<dialog id="resources-dialog" class="app-dialog">
|
||
<div class="dialog-panel resources-panel">
|
||
<button id="close-resources" class="modal-close" type="button" aria-label="Close dialog">×</button>
|
||
<header class="resources-panel__header">
|
||
<h2>My notes and workspaces</h2>
|
||
<p class="dialog-copy">Items created while signed in are assigned to your account.</p>
|
||
<p class="resources-access-rules"><strong>Access rules:</strong> Public items open from their link; a password
|
||
adds link-based protection. Private items are visible only to their owner and explicitly shared accounts or
|
||
valid share links. Unauthorized visitors receive a not-found response.</p>
|
||
</header>
|
||
<div class="list-controls resources-controls">
|
||
<label class="list-search"><span class="sr-only">Search notes and workspaces</span><input id="resources-search"
|
||
type="search" placeholder="Search notes and workspaces…" autocomplete="off"></label>
|
||
<label class="page-size-label">Per page<select class="app-select-input" id="resources-per-page">
|
||
<option value="25">25</option>
|
||
<option value="50">50</option>
|
||
<option value="100">100</option>
|
||
</select></label>
|
||
</div>
|
||
<section class="resources-category resources-category--favorites">
|
||
<header class="resources-category__header">
|
||
<h3>Favorites</h3>
|
||
<p>Favorite notes are shown only while your current account, share link, or password access can still open them. If access is lost, they are hidden and return automatically when access is restored.</p>
|
||
</header>
|
||
<div id="favorites-list" class="resources-list resources-list--favorites"></div>
|
||
</section>
|
||
<section class="resources-category">
|
||
<header class="resources-category__header">
|
||
<h3>Owned and shared</h3>
|
||
</header>
|
||
<div id="resources-list" class="resources-list"></div>
|
||
<nav id="resources-pagination" class="pagination" aria-label="Resources pagination"></nav>
|
||
</section>
|
||
<p id="resources-error" class="form-message error" role="alert"></p>
|
||
</div>
|
||
</dialog>
|
||
|
||
<dialog id="profile-dialog" class="app-dialog">
|
||
<form id="profile-form" class="dialog-panel identity-panel" autocomplete="off">
|
||
<button id="close-profile" class="modal-close" type="button" aria-label="Close dialog">×</button>
|
||
<header class="identity-panel__header">
|
||
<h2>Profile</h2>
|
||
<p id="profile-copy" class="dialog-copy">Manage your local RustPad account.</p>
|
||
</header>
|
||
<div class="identity-fields">
|
||
<label data-directory-profile-field>Full name<input id="profile-directory-name" readonly></label>
|
||
<label data-directory-profile-field>Organization<input id="profile-directory-organization" readonly></label>
|
||
<p id="profile-nickname-suggestion" data-directory-profile-field class="profile-suggestion"></p>
|
||
<label>Nickname<input id="profile-nickname" maxlength="40" required></label>
|
||
<label class="profile-color-field">Editor color<input id="profile-color" type="color"
|
||
aria-label="Choose your editor color"></label>
|
||
<fieldset class="profile-theme-field">
|
||
<legend>Interface theme</legend>
|
||
<div class="theme-options">
|
||
<label class="theme-option">
|
||
<input type="radio" name="profile-theme" value="dark" checked>
|
||
<span><strong>Dark</strong><small>Current RustPad appearance</small></span>
|
||
</label>
|
||
<label class="theme-option">
|
||
<input type="radio" name="profile-theme" value="light">
|
||
<span><strong>Light</strong><small>Warm cream surfaces and dark text</small></span>
|
||
</label>
|
||
</div>
|
||
</fieldset>
|
||
<div class="profile-language-field">
|
||
<span id="profile-language-label" data-i18n="common.language">Language</span>
|
||
<div class="profile-language-control" data-language-picker>
|
||
<svg class="profile-language-control__icon" viewBox="0 0 24 24" aria-hidden="true">
|
||
<circle cx="12" cy="12" r="9"></circle>
|
||
<path d="M3 12h18M12 3a15 15 0 0 1 0 18M12 3a15 15 0 0 0 0 18"></path>
|
||
</svg>
|
||
<button id="profile-language-button" class="profile-language-trigger" type="button"
|
||
aria-labelledby="profile-language-label profile-language-current" aria-haspopup="listbox"
|
||
aria-expanded="false" aria-controls="profile-language-options">
|
||
<span id="profile-language-current" class="profile-language-current" data-i18n-ignore>English</span>
|
||
</button>
|
||
<svg class="profile-language-control__chevron" viewBox="0 0 20 20" aria-hidden="true">
|
||
<path d="m6 8 4 4 4-4"></path>
|
||
</svg>
|
||
<input id="profile-language" type="hidden" value="en">
|
||
<div id="profile-language-options" class="profile-language-menu" role="listbox" data-i18n-ignore
|
||
aria-labelledby="profile-language-label" hidden></div>
|
||
</div>
|
||
<br>
|
||
</div>
|
||
<label data-local-profile-field>Current e-mail<input id="profile-current-email" type="email" readonly></label>
|
||
<label data-local-profile-field>New e-mail<input id="profile-email" type="email" maxlength="320"
|
||
placeholder="Leave empty to keep current"></label>
|
||
<label data-local-profile-field>New password<input id="profile-new-password" type="password" minlength="8"
|
||
maxlength="128" placeholder="Leave empty to keep current"></label>
|
||
<label data-local-profile-field>Current password<input id="profile-password" type="password" minlength="8"
|
||
maxlength="128" placeholder="Required for e-mail or password changes"></label>
|
||
</div>
|
||
<div class="profile-actions">
|
||
<button class="primary-button" type="submit">Save profile</button>
|
||
<button id="profile-delete" data-local-profile-field class="danger-button" type="button">Delete account</button>
|
||
</div>
|
||
<p id="profile-message" class="form-message" role="status"></p>
|
||
</form>
|
||
</dialog>
|
||
<div id="toast" class="toast-region" aria-live="polite" aria-label="Notifications" aria-relevant="additions removals">
|
||
</div>
|
||
|
||
</body>
|
||
|
||
</html> |