Merge pull request 'Tweaks for login/registration and base + image roundness' (#25) from BordedDev/snek:main into main
Reviewed-on: #25 Reviewed-by: retoor <retoor@noreply@molodetz.nl>
This commit is contained in:
commit
aedfe9aa94
18
src/snek/static/back-form.css
Normal file
18
src/snek/static/back-form.css
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
.back-form {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: auto auto;
|
||||||
|
grid-template-rows: auto auto;
|
||||||
|
|
||||||
|
fancy-button {
|
||||||
|
grid-column: 1 / 1;
|
||||||
|
grid-row: 1 / 1;
|
||||||
|
z-index: 1;
|
||||||
|
margin-left: 30px;
|
||||||
|
margin-top: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
generic-form {
|
||||||
|
grid-column: 1 / 3;
|
||||||
|
grid-row: 1 / 3;
|
||||||
|
}
|
||||||
|
}
|
@ -58,10 +58,10 @@ header nav a {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.no-select {
|
.no-select {
|
||||||
-webkit-user-select: none;
|
-webkit-user-select: none;
|
||||||
-moz-user-select: none;
|
-moz-user-select: none;
|
||||||
-ms-user-select: none;
|
-ms-user-select: none;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
header nav a:hover {
|
header nav a:hover {
|
||||||
@ -111,19 +111,22 @@ a {
|
|||||||
height: 200px;
|
height: 200px;
|
||||||
background: #1a1a1a;
|
background: #1a1a1a;
|
||||||
}
|
}
|
||||||
|
|
||||||
.container {
|
.container {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
|
|
||||||
ul {
|
ul {
|
||||||
list-style: none;
|
list-style: none;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
a {
|
a {
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
color: #f05a28;
|
color: #f05a28;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.chat-messages::-webkit-scrollbar {
|
.chat-messages::-webkit-scrollbar {
|
||||||
@ -161,34 +164,38 @@ a {
|
|||||||
color: #f05a28;
|
color: #f05a28;
|
||||||
margin-bottom: 3px;
|
margin-bottom: 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
* {
|
* {
|
||||||
word-break: break-word;
|
word-break: break-word;
|
||||||
overflow-wrap: break-word;
|
overflow-wrap: break-word;
|
||||||
hyphens: auto;
|
hyphens: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.highlight pre {
|
.highlight pre {
|
||||||
white-space: pre-wrap;
|
white-space: pre-wrap;
|
||||||
word-break: break-word;
|
word-break: break-word;
|
||||||
overflow-wrap: break-word;
|
overflow-wrap: break-word;
|
||||||
hyphens: auto;
|
hyphens: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.chat-messages .message .message-content .text, .threads .thread .message-content .text {
|
.chat-messages .message .message-content .text, .threads .thread .message-content .text {
|
||||||
margin-bottom: 5px;
|
margin-bottom: 5px;
|
||||||
color: #e6e6e6;
|
color: #e6e6e6;
|
||||||
word-break: break-word;
|
word-break: break-word;
|
||||||
overflow-wrap: break-word;
|
overflow-wrap: break-word;
|
||||||
hyphens: auto;
|
hyphens: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.message-content {
|
.message-content {
|
||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.message-content {
|
.message-content {
|
||||||
|
|
||||||
img, video, iframe, div {
|
img, video, iframe, div {
|
||||||
max-width: 100%;
|
max-width: 90%;
|
||||||
}
|
border-radius: 20px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.chat-messages .message .message-content .time, .threads .thread .message-content .time {
|
.chat-messages .message .message-content .time, .threads .thread .message-content .time {
|
||||||
@ -254,11 +261,11 @@ input[type="text"], .chat-input textarea {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.message.switch-user {
|
.message.switch-user {
|
||||||
.text img,iframe, video {
|
.text img, iframe, video {
|
||||||
max-width: 90%;
|
max-width: 90%;
|
||||||
border-radius: 20px;
|
border-radius: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.avatar {
|
.avatar {
|
||||||
user-select: none;
|
user-select: none;
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
@ -269,15 +276,15 @@ input[type="text"], .chat-input textarea {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.message:has(+ .message.switch-user), .message:last-child{
|
.message:has(+ .message.switch-user), .message:last-child {
|
||||||
.time {
|
.time {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The entire scrollbar */
|
/* The entire scrollbar */
|
||||||
::-webkit-scrollbar {
|
::-webkit-scrollbar {
|
||||||
display:none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
::-webkit-scrollbar-track {
|
::-webkit-scrollbar-track {
|
||||||
@ -300,8 +307,9 @@ input[type="text"], .chat-input textarea {
|
|||||||
}
|
}
|
||||||
|
|
||||||
a {
|
a {
|
||||||
text-decoration:none
|
text-decoration: none
|
||||||
}
|
}
|
||||||
|
|
||||||
.sidebar {
|
.sidebar {
|
||||||
width: 250px;
|
width: 250px;
|
||||||
background-color: #121212;
|
background-color: #121212;
|
||||||
|
@ -62,7 +62,7 @@ class GenericField extends HTMLElement {
|
|||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
super();
|
super();
|
||||||
this.attachShadow({ mode: 'open' });
|
this.attachShadow({mode: 'open'});
|
||||||
this.container = document.createElement('div');
|
this.container = document.createElement('div');
|
||||||
this.styleElement = document.createElement('style');
|
this.styleElement = document.createElement('style');
|
||||||
this.styleElement.innerHTML = `
|
this.styleElement.innerHTML = `
|
||||||
@ -75,16 +75,28 @@ class GenericField extends HTMLElement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
input {
|
input {
|
||||||
width: 90%;
|
width: 90%;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
margin: 10px 0;
|
margin: 10px 0;
|
||||||
border: 1px solid #333;
|
border: 1px solid #333;
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
background-color: #1a1a1a;
|
background-color: #1a1a1a;
|
||||||
color: #e6e6e6;
|
color: #e6e6e6;
|
||||||
font-size: 1em;
|
font-size: 1em;
|
||||||
|
|
||||||
|
&:focus {
|
||||||
|
outline: 2px solid #f05a28 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
&::placeholder {
|
||||||
|
transition: opacity 0.3s;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:focus::placeholder {
|
||||||
|
opacity: 0.4;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
button {
|
button {
|
||||||
width: 50%;
|
width: 50%;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
@ -165,18 +177,26 @@ class GenericField extends HTMLElement {
|
|||||||
const me = this;
|
const me = this;
|
||||||
this.inputElement.addEventListener("keyup", (e) => {
|
this.inputElement.addEventListener("keyup", (e) => {
|
||||||
if (e.key === 'Enter') {
|
if (e.key === 'Enter') {
|
||||||
|
const event = new CustomEvent("change", {detail: me, bubbles: true});
|
||||||
|
me.dispatchEvent(event);
|
||||||
|
|
||||||
me.dispatchEvent(new Event("submit"));
|
me.dispatchEvent(new Event("submit"));
|
||||||
} else if (me.field.value !== e.target.value) {
|
} else if (me.field.value !== e.target.value) {
|
||||||
const event = new CustomEvent("change", { detail: me, bubbles: true });
|
const event = new CustomEvent("change", {detail: me, bubbles: true});
|
||||||
me.dispatchEvent(event);
|
me.dispatchEvent(event);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
this.inputElement.addEventListener("click", (e) => {
|
this.inputElement.addEventListener("click", (e) => {
|
||||||
const event = new CustomEvent("click", { detail: me, bubbles: true });
|
const event = new CustomEvent("click", {detail: me, bubbles: true});
|
||||||
me.dispatchEvent(event);
|
me.dispatchEvent(event);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
this.inputElement.addEventListener("blur", (e) => {
|
||||||
|
const event = new CustomEvent("change", {detail: me, bubbles: true});
|
||||||
|
me.dispatchEvent(event);
|
||||||
|
}, true);
|
||||||
|
|
||||||
this.container.appendChild(this.inputElement);
|
this.container.appendChild(this.inputElement);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -226,7 +246,7 @@ class GenericForm extends HTMLElement {
|
|||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
super();
|
super();
|
||||||
this.attachShadow({ mode: 'open' });
|
this.attachShadow({mode: 'open'});
|
||||||
this.styleElement = document.createElement("style");
|
this.styleElement = document.createElement("style");
|
||||||
this.styleElement.innerHTML = `
|
this.styleElement.innerHTML = `
|
||||||
|
|
||||||
@ -307,6 +327,16 @@ class GenericForm extends HTMLElement {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
fieldElement.addEventListener("submit", async (e) => {
|
||||||
|
const isValid = await this.validate();
|
||||||
|
if (isValid) {
|
||||||
|
const saveResult = await this.submit();
|
||||||
|
if (saveResult.redirect_url) {
|
||||||
|
window.location.pathname = saveResult.redirect_url;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@ -322,7 +352,7 @@ class GenericForm extends HTMLElement {
|
|||||||
headers: {
|
headers: {
|
||||||
'Content-Type': 'application/json'
|
'Content-Type': 'application/json'
|
||||||
},
|
},
|
||||||
body: JSON.stringify({ "action": "validate", "form": this.form })
|
body: JSON.stringify({"action": "validate", "form": this.form})
|
||||||
});
|
});
|
||||||
|
|
||||||
const form = await response.json();
|
const form = await response.json();
|
||||||
@ -353,7 +383,7 @@ class GenericForm extends HTMLElement {
|
|||||||
headers: {
|
headers: {
|
||||||
'Content-Type': 'application/json'
|
'Content-Type': 'application/json'
|
||||||
},
|
},
|
||||||
body: JSON.stringify({ "action": "submit", "form": this.form })
|
body: JSON.stringify({"action": "submit", "form": this.form})
|
||||||
});
|
});
|
||||||
return await response.json();
|
return await response.json();
|
||||||
}
|
}
|
||||||
|
@ -1,26 +1,36 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>{% block title %}{% endblock %}</title>
|
<meta name="theme-color" content="#000000">
|
||||||
<script src="/app.js"></script>
|
<meta name="application-name" content="Snek chat by Molodetz">
|
||||||
<script src="/message-list.js"></script>
|
<meta name="description" content="Snek chat by Molodetz">
|
||||||
<style>{{ highlight_styles }}</style>
|
<meta name="author" content="Molodetz">
|
||||||
<link rel="stylesheet" href="/style.css">
|
<meta name="keywords" content="snek, chat, molodetz">
|
||||||
<script src="/fancy-button.js"></script>
|
<meta name="color-scheme" content="dark">
|
||||||
|
|
||||||
|
<title>{% block title %}Snek chat by Molodetz{% endblock %}</title>
|
||||||
|
|
||||||
|
<script src="/app.js"></script>
|
||||||
|
<script src="/message-list.js"></script>
|
||||||
|
<style>{{ highlight_styles }}</style>
|
||||||
|
<link rel="stylesheet" href="/style.css">
|
||||||
|
<script src="/fancy-button.js"></script>
|
||||||
<script src="/html-frame.js"></script>
|
<script src="/html-frame.js"></script>
|
||||||
<script src="/generic-form.js"></script>
|
<script src="/generic-form.js"></script>
|
||||||
<link rel="stylesheet" href="/html-frame.css"></script>
|
<link rel="stylesheet" href="/html-frame.css">
|
||||||
|
|
||||||
|
{% block head %}
|
||||||
|
{% endblock %}
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<header>
|
<header>
|
||||||
{% block header %}
|
{% block header %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
</header>
|
</header>
|
||||||
<main>
|
<main>
|
||||||
{% block main %}
|
{% block main %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
</main>
|
</main>
|
||||||
|
@ -1,7 +1,16 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
|
|
||||||
{% block main %}
|
{% block title %}
|
||||||
<fancy-button url="/back" text="Back" size="auto"></fancy-button>
|
Login - Snek chat by Molodetz
|
||||||
<generic-form class="center" url="/login.json"></generic-form>
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block head %}
|
||||||
|
<link rel="stylesheet" href="/back-form.css">
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block main %}
|
||||||
|
<div class="back-form">
|
||||||
|
<fancy-button url="/back" text="Back" size="auto"></fancy-button>
|
||||||
|
<generic-form class="center" url="/login.json"></generic-form>
|
||||||
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@ -1,7 +1,17 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
{% block title %}
|
||||||
|
Register - Snek chat by Molodetz
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block head %}
|
||||||
|
<link rel="stylesheet" href="/back-form.css">
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
{% block main %}
|
{% block main %}
|
||||||
<fancy-button url="/back" text="Back" size="auto"></fancy-button>
|
<div class="back-form">
|
||||||
|
<fancy-button url="/back" text="Back" size="auto"></fancy-button>
|
||||||
<generic-form class="center" url="/register.json"></generic-form>
|
|
||||||
|
<generic-form class="center" url="/register.json"></generic-form>
|
||||||
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
Loading…
Reference in New Issue
Block a user