Progress
This commit is contained in:
		
							parent
							
								
									d10768403d
								
							
						
					
					
						commit
						6948220746
					
				
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@ -1,3 +1,4 @@
 | 
				
			|||||||
 | 
					.r_history
 | 
				
			||||||
.vscode
 | 
					.vscode
 | 
				
			||||||
.history
 | 
					.history
 | 
				
			||||||
.resources
 | 
					.resources
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										14
									
								
								src/snek/form/settings/profile.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								src/snek/form/settings/profile.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,14 @@
 | 
				
			|||||||
 | 
					from snek.system.form import Form, FormInputElement, FormButtonElement, HTMLElement
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class SettingsProfileForm(Form):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    nick = FormInputElement(name="nick", required=True, place_holder="Your Nickname", min_length=1, max_length=20)
 | 
				
			||||||
 | 
					    action = FormButtonElement(
 | 
				
			||||||
 | 
					        name="action", value="submit", text="Save", type="button"
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    title = HTMLElement(tag="h1", text="Profile")
 | 
				
			||||||
 | 
					    profile = FormInputElement(name="profile", place_holder="Tell about yourself.", required=False,max_length=300)
 | 
				
			||||||
 | 
					    action = FormButtonElement(
 | 
				
			||||||
 | 
					        name="action", value="submit", text="Save", type="button"
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
							
								
								
									
										7
									
								
								src/snek/mapper/user_property.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								src/snek/mapper/user_property.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					from snek.model.user_property import UserPropertyModel
 | 
				
			||||||
 | 
					from snek.system.mapper import BaseMapper
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class UserPropertyMapper(BaseMapper):
 | 
				
			||||||
 | 
					    table_name = "user_property"
 | 
				
			||||||
 | 
					    model_class = UserPropertyModel
 | 
				
			||||||
							
								
								
									
										10
									
								
								src/snek/model/user_property.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								src/snek/model/user_property.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,10 @@
 | 
				
			|||||||
 | 
					import mimetypes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from snek.system.model import BaseModel, ModelField
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class UserPropertyModel(BaseModel):
 | 
				
			||||||
 | 
					    user_uid = ModelField(name="user_uid", required=True, kind=str)
 | 
				
			||||||
 | 
					    name = ModelField(name="name", required=True, kind=str)
 | 
				
			||||||
 | 
					    value = ModelField(name="path", required=True, kind=str)
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
							
								
								
									
										13
									
								
								src/snek/templates/app_menu.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								src/snek/templates/app_menu.html
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					  <div>
 | 
				
			||||||
 | 
					    <div class="logo no-select">Test</div>
 | 
				
			||||||
 | 
					    <nav class="no-select" style="float:right;overflow:hidden;scroll-behavior:smooth">
 | 
				
			||||||
 | 
					      <a class="no-select" href="/web.html">🏠</a>
 | 
				
			||||||
 | 
					      <a class="no-select" href="/search-user.html">🔍</a>
 | 
				
			||||||
 | 
					      <a class="no-select" style="display:none" id="install-button" href="#">📥</a>
 | 
				
			||||||
 | 
					      <a class="no-select" href="/threads.html">👥</a>
 | 
				
			||||||
 | 
					      <a class="no-select" href="#">⚙️</a>
 | 
				
			||||||
 | 
					      <a class="no-select" href="/logout.html">🔒</a>
 | 
				
			||||||
 | 
					    </nav>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										37
									
								
								src/snek/templates/settings/index.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								src/snek/templates/settings/index.html
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,37 @@
 | 
				
			|||||||
 | 
					{% extends "app.html" %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% block sidebar %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% include "settings/sidebar.html" %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% endblock %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% block header_text %}<h2 style="color:#fff">Settings</h2>{% endblock %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% block head %}
 | 
				
			||||||
 | 
					   <link href="https://cdn.bootcdn.net/ajax/libs/monaco-editor/0.20.0/min/vs/editor/editor.main.min.css" rel="stylesheet">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <script src="https://cdn.bootcdn.net/ajax/libs/monaco-editor/0.20.0/min/vs/loader.min.js"></script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% endblock %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% block main %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<div id="profile_description"></div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script type="module">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        require.config({ paths: { 'vs': 'https://cdn.bootcdn.net/ajax/libs/monaco-editor/0.20.0/min/vs' } });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        require(['vs/editor/editor.main'], function () {
 | 
				
			||||||
 | 
					var editor = monaco.editor.create(document.getElementById('profile_description'), {
 | 
				
			||||||
 | 
					                value: phpCode,
 | 
				
			||||||
 | 
					                language: 'php'
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% endblock main %}
 | 
				
			||||||
							
								
								
									
										31
									
								
								src/snek/templates/settings/profile.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								src/snek/templates/settings/profile.html
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,31 @@
 | 
				
			|||||||
 | 
					{% extends "settings/index.html" %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% block header_text %}<h2 style="color:#fff">Profile</h2>{% endblock %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% block main %}
 | 
				
			||||||
 | 
					<section>
 | 
				
			||||||
 | 
					<form>
 | 
				
			||||||
 | 
					    <h2>Nickname</h2>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					<input type="text" name="nick" placeholder="Your nickname" value="{{ user.nick.value }}" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</form>
 | 
				
			||||||
 | 
					<h2>Description</h2>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<textarea id="profile"></textarea>
 | 
				
			||||||
 | 
					</section>
 | 
				
			||||||
 | 
					<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/easymde/dist/easymde.min.css">
 | 
				
			||||||
 | 
					<script src="https://cdn.jsdelivr.net/npm/easymde/dist/easymde.min.js"></script>
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					    const easyMDE = new EasyMDE({element:document.getElementById("profile")});
 | 
				
			||||||
 | 
					    </script>
 | 
				
			||||||
 | 
					<style>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.EasyMDEContainer {
 | 
				
			||||||
 | 
					        filter: invert(1) !important;
 | 
				
			||||||
 | 
					     
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    </style>
 | 
				
			||||||
 | 
					{% endblock %}
 | 
				
			||||||
							
								
								
									
										9
									
								
								src/snek/templates/settings/sidebar.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								src/snek/templates/settings/sidebar.html
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,9 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					<aside class="sidebar" id="channelSidebar">
 | 
				
			||||||
 | 
					    <h2>You</h2>
 | 
				
			||||||
 | 
					    <ul>
 | 
				
			||||||
 | 
					        <li><a class="no-select" href="/settings/profile.html">Profile</a></li>
 | 
				
			||||||
 | 
					        <li><a class="no-select" href="/settings/gists.html">Gists</a></li>
 | 
				
			||||||
 | 
					    </ul>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  </aside>
 | 
				
			||||||
							
								
								
									
										8
									
								
								src/snek/view/settings/index.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								src/snek/view/settings/index.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,8 @@
 | 
				
			|||||||
 | 
					from snek.system.view import BaseView 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class SettingsIndexView(BaseView):
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    login_required = True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    async def get(self):
 | 
				
			||||||
 | 
					        return await self.render_template('settings/index.html')
 | 
				
			||||||
							
								
								
									
										36
									
								
								src/snek/view/settings/profile.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								src/snek/view/settings/profile.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,36 @@
 | 
				
			|||||||
 | 
					from snek.system.view import BaseView,BaseFormView
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from snek.form.settings.profile import SettingsProfileForm
 | 
				
			||||||
 | 
					from aiohttp import web
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class SettingsProfileView(BaseFormView):
 | 
				
			||||||
 | 
					    form = SettingsProfileForm
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    login_required = True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    async def get(self):
 | 
				
			||||||
 | 
					        form = self.form(app=self.app)
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					        if self.request.path.endswith(".json"):
 | 
				
			||||||
 | 
					            form['nick'] = self.request['user']['nick']
 | 
				
			||||||
 | 
					            return web.json_response(await form.to_json()) 
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        user = await self.services.user.get(uid=self.session.get("uid"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return await self.render_template(
 | 
				
			||||||
 | 
					            "settings/profile.html", {"form": await form.to_json(), "user": user}
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    async def submit(self, form):
 | 
				
			||||||
 | 
					        post = await self.request.json()
 | 
				
			||||||
 | 
					        form.set_user_data(post["form"])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if await form.is_valid:
 | 
				
			||||||
 | 
					            user = self.request['user']
 | 
				
			||||||
 | 
					            user["nick"] = form["nick"]
 | 
				
			||||||
 | 
					            await self.services.user.save(user)
 | 
				
			||||||
 | 
					            return {"redirect_url": "/settings/profile.html"}
 | 
				
			||||||
 | 
					        return {"is_valid": False}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user