Merge pull request 'Tweaks for login/registration and base + image roundness' (#25) from BordedDev/snek:main into main
Reviewed-on: https://molodetz.nl/retoor/snek/pulls/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