Merge pull request 'front/app-design-init' (#3) from front/app-design-init into master
Reviewed-on: #3
This commit is contained in:
		
							
								
								
									
										22
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								README.md
									
									
									
									
									
								
							| @@ -1,14 +1,26 @@ | ||||
| # taskmanager | ||||
| # Task Manager | ||||
|  | ||||
| Interactive TODO list web application | ||||
|  | ||||
| # Use | ||||
| # Development Setup | ||||
|  | ||||
| python3 ./run.py | ||||
| Install python and pip on local machine | ||||
|  | ||||
| # Install | ||||
| ```bash | ||||
| pip install virtualenv | ||||
| python -m venv venv #/path/to/new/virtual/environment | ||||
| source venv/bin/activate #activate virtual env | ||||
| pip install -r requirements.txt | ||||
| python3 ./init_db.py #initialize database | ||||
|  | ||||
| python3 ./run.py #run project | ||||
| ``` | ||||
|  | ||||
| # Build app | ||||
|  | ||||
| ```bash | ||||
| cd build-deb/ | ||||
| make | ||||
| sudo apt install ./flaskapp.deb | ||||
| make | ||||
| ``` | ||||
|  | ||||
|   | ||||
| @@ -1,25 +1,36 @@ | ||||
| :root { | ||||
|   --border-radus: 1rem; | ||||
|   --background: #000000; | ||||
|   --header-background: #FFFFFF; | ||||
|   --background: #383840; | ||||
|   --header-background: #212121; | ||||
|   --header-height: 3rem; | ||||
|   --input-bar-height: 3rem; | ||||
|   --white: #FFF; | ||||
|   --primary: #d2d2d2; | ||||
|   --font-primary: #d2d2d2; | ||||
|   color: #FFF; | ||||
| } | ||||
|  | ||||
| body{ | ||||
| 	background: var(--background); | ||||
| 	font-family: sans-serif; | ||||
| * { | ||||
| 	margin: 0; | ||||
| 	padding: 0; | ||||
| } | ||||
|  | ||||
| a, a:visited { | ||||
| 	color: var(--font-primary); | ||||
| } | ||||
|  | ||||
| body { | ||||
| 	background: var(--background); | ||||
| 	font-family: sans-serif; | ||||
| } | ||||
|  | ||||
| main { | ||||
| 	display: flex; | ||||
| 	flex-direction: column; | ||||
| 	align-self: flex-start; | ||||
| 	gap: 1rem; | ||||
| 	margin: 0 auto; | ||||
| 	padding: 30px 0; | ||||
| 	height: calc(100vh - var(--header-height) - var(--input-bar-height)); | ||||
| 	box-sizing: border-box; | ||||
| } | ||||
| @@ -36,6 +47,12 @@ header { | ||||
| 	box-sizing: border-box; | ||||
| } | ||||
|  | ||||
| header ul { | ||||
| 	display: flex; | ||||
| 	list-style-type: none; | ||||
| 	gap:15px | ||||
| } | ||||
|  | ||||
| footer { | ||||
| 	width: 100vw; | ||||
| 	height: var(--input-bar-height); | ||||
| @@ -47,3 +64,120 @@ footer { | ||||
| 	box-sizing: border-box; | ||||
| 	gap: 1rem; | ||||
| } | ||||
|  | ||||
| /* global classes */ | ||||
| .container { | ||||
| 	width: 100%; | ||||
| 	max-width: 960px; | ||||
| 	margin: 0 auto; | ||||
| 	padding: 20px 30px; | ||||
| } | ||||
|  | ||||
| .page h1 { | ||||
| 	margin-bottom: 15px; | ||||
| } | ||||
|  | ||||
| .btn-wrap { | ||||
| 	display: flex; | ||||
| 	align-items: center; | ||||
| 	justify-content: center; | ||||
| 	padding: 15px 12px; | ||||
| } | ||||
| .btn { | ||||
| 	display: inline-block; | ||||
| 	padding: 5px 20px; | ||||
| 	border: 1px solid var(--primary);   | ||||
| 	color: var(--primary); | ||||
| 	background-color: transparent; | ||||
| 	border-radius: 5px;     | ||||
| } | ||||
|  | ||||
| .btn:hover { | ||||
| 	background-color: rgba(0,0,0,0.3); | ||||
| 	cursor: pointer; | ||||
| } | ||||
|  | ||||
| .btn a { | ||||
| 	text-decoration: none; | ||||
| } | ||||
|  | ||||
| .label { | ||||
|   text-transform: uppercase; | ||||
|   letter-spacing: 2px; | ||||
|   font-size: 14px; | ||||
|   font-weight: 600; | ||||
|   margin-bottom: 11px; | ||||
|   display: inline-block; | ||||
|   user-select: none; | ||||
| } | ||||
|  | ||||
| .underline { | ||||
| 	border-bottom: 1px solid var(--font-primary); | ||||
| 	padding-bottom: 2px; | ||||
| 	margin-top:20px; | ||||
| } | ||||
|  | ||||
| .section-tasks > ul { | ||||
| 	margin-left: 30px; | ||||
| } | ||||
|  | ||||
| /* page index*/ | ||||
|  | ||||
| .page-index .btn{ | ||||
| 	margin-bottom: 20px; | ||||
| } | ||||
|  | ||||
| .task-wrap { | ||||
|   border: 1px solid var(--primary); | ||||
|   padding: 20px 40px 40px 40px; | ||||
|   border-radius: 5px; | ||||
|   box-shadow: inset 0 0 9px 4px rgba(255,255,255, 0.1); | ||||
| } | ||||
|  | ||||
| .task { | ||||
| 	display: flex; | ||||
| 	border-bottom: 1px solid white; | ||||
| } | ||||
|  | ||||
| .task a:hover { | ||||
| 	background-color: rgba(255,255,255,0.1); | ||||
| } | ||||
|  | ||||
| .task a { | ||||
| 	display: flex; | ||||
| 	gap: 15px; | ||||
| 	width: 100%; | ||||
| 	padding: 20px; | ||||
| 	text-decoration: none; | ||||
| } | ||||
|  | ||||
| /* Page projects */ | ||||
|  | ||||
| .page-project h1 { | ||||
| 	text-transform: uppercase; | ||||
| } | ||||
|  | ||||
| .user-info-wrap{ | ||||
| 	margin-bottom: 10px; | ||||
| } | ||||
|  | ||||
| /* form */ | ||||
|  | ||||
| .form-wrap { | ||||
| 	max-width: 400px; | ||||
| } | ||||
|  | ||||
| .form-input { | ||||
| 	display: flex;   | ||||
| 	flex-direction: column; | ||||
| 	padding: 10px 0; | ||||
| } | ||||
|  | ||||
| .form-input input { | ||||
| 	height: 25px;   | ||||
| 	border-radius: 5px; | ||||
| 	outline: none; | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -1,19 +1,36 @@ | ||||
| <!DOCTYPE html> | ||||
| <html> | ||||
| <head> | ||||
| 	<meta charset="utf-8"> | ||||
| 	<meta name="viewport" content="width=device-width, initial-scale=1"> | ||||
| 	<meta charset="utf-8" /> | ||||
| 	<meta name="viewport" content="width=device-width, initial-scale=1" /> | ||||
| 	<link rel="stylesheet" href="/static/style.css" /> | ||||
| 	<title>Add new task</title> | ||||
| 	<link rel="stylesheet" href="/static/style.css"> | ||||
| </head> | ||||
| <body> | ||||
| 	<main> | ||||
| 		<form action="/addtask" method="POST"> | ||||
| 			<label for="taskname">taskname</label> | ||||
| 			<input type="text" name="taskname" id="taskname" required> | ||||
| 			<label for="taskdesc">taskdesc</label> | ||||
| 			<input type="text" name="taskdesc" id="taskdesc" required> | ||||
| 			<button> Submit </button> | ||||
| 	<header> | ||||
| 		<nav class="container"> | ||||
| 			<ul> | ||||
| 				<li class="current"><a href="/">Home</a></li> | ||||
| 				<li><a href="/register">Register</a></li> | ||||
| 			</ul> | ||||
| 		</nav> | ||||
| 	</header> | ||||
| 	<main class="container page page-addtask"> | ||||
| 		<h1>Create new task</h1> | ||||
| 		<div class="form-wrap"> | ||||
| 			<form action="/addtask" method="POST"> | ||||
| 				<div class="form-input"> | ||||
| 					<label for="taskname" class="label">Task name:</label> | ||||
| 					<input type="text" name="taskname" id="taskname" required /> | ||||
| 				</div> | ||||
| 				<div class="form-input"> | ||||
| 					<label for="taskdesc" class="label">Description:</label> | ||||
| 					<input type="text" name="taskdesc" id="taskdesc" required /> | ||||
| 				</div> | ||||
| 				<div class="btn-wrap"> | ||||
| 					<button class="btn">Submit</button> | ||||
| 				</div> | ||||
| 			</div> | ||||
| 		</form> | ||||
| 	</main> | ||||
| </body> | ||||
|   | ||||
| @@ -1,21 +1,37 @@ | ||||
| <!DOCTYPE html> | ||||
| <html> | ||||
| <head> | ||||
| 	<meta charset="utf-8"> | ||||
| 	<meta name="viewport" content="width=device-width, initial-scale=1"> | ||||
| 	<meta charset="utf-8" /> | ||||
| 	<meta name="viewport" content="width=device-width, initial-scale=1" /> | ||||
| 	<link rel="stylesheet" href="/static/style.css" /> | ||||
| 	<title>Task manager</title> | ||||
| 	<link rel="stylesheet" href="/static/style.css"> | ||||
| </head> | ||||
| <body> | ||||
| 	<header> | ||||
| 		<nav class="container"> | ||||
| 			<ul> | ||||
| 				<li class="current"><a href="/">Home</a></li> | ||||
| 				<li><a href="/register">Register</a></li> | ||||
| 			</ul> | ||||
| 		</nav> | ||||
| 	</header> | ||||
| 	<main> | ||||
| 	<main class="container page page-index"> | ||||
| 		<section> | ||||
| 			{% for task in tasks %} | ||||
| 				<li><a href="/projects/{{task.id}}"> {{task.name}} </a></li> | ||||
| 			{% endfor %} | ||||
| 			<div class="btn"> | ||||
| 				<a href="/addtask">Add new task</a> | ||||
| 			</div> | ||||
| 			<div class="tasks-wrap"> | ||||
| 				<h1>Tasks</h1> | ||||
| 				{% for task in tasks %} | ||||
| 				<div class="task"> | ||||
| 					<a href="/projects/{{task.id}}">  | ||||
| 						<div>{{task.id}}.</div> | ||||
| 						<div>{{task.name}}</div>  | ||||
| 					</a> | ||||
| 				</div> | ||||
| 				{% endfor %} | ||||
| 			</div> | ||||
| 		</section> | ||||
|                 <p> <a href="/addtask">Add</a> new task <p> | ||||
| 	</main> | ||||
| 	<footer> | ||||
| 	</footer> | ||||
|   | ||||
| @@ -1,32 +1,51 @@ | ||||
| <!DOCTYPE html> | ||||
| <html> | ||||
| <head> | ||||
| 	<meta charset="utf-8"> | ||||
| 	<meta name="viewport" content="width=device-width, initial-scale=1"> | ||||
| 	<meta charset="utf-8" /> | ||||
| 	<meta name="viewport" content="width=device-width, initial-scale=1" /> | ||||
| 	<link rel="stylesheet" href="/static/style.css" /> | ||||
| 	<title>{{task.name}}</title> | ||||
| 	<link rel="stylesheet" href="/static/style.css"> | ||||
| </head> | ||||
| <body> | ||||
| 	<header> | ||||
| 		<nav class="container"> | ||||
| 			<ul> | ||||
| 				<li><a href="/">Home</a></li> | ||||
| 				<li><a href="/register">Register</a></li> | ||||
| 			</ul> | ||||
| 		</nav> | ||||
| 	</header> | ||||
| 	<main> | ||||
| 		<section> | ||||
| 			<li>{{task.name}}</li> | ||||
| 			<li>{{task.desc}}</li> | ||||
| 	<main class="container page page-project"> | ||||
| 		<section > | ||||
| 			<h1>{{task.name}}</h1> | ||||
| 			<label class="label underline">Description</label> | ||||
| 			<p>{{task.desc}}</p> | ||||
| 		</section> | ||||
| 		<section class="section-task"> | ||||
| 			<div> | ||||
| 				<label class="label underline">Users added to this task</label> | ||||
| 				{% for user in users %} | ||||
| 					<div class="user-info-wrap"> | ||||
| 						<div><b>Username:</b> {{user.username}}</div> | ||||
| 						<div><b>Contact info:</b> {{user.contact}}</div> | ||||
| 					</div> | ||||
| 				{% endfor %} | ||||
| 			</div> | ||||
| 			<div> | ||||
| 				<label class="label underline"> Add person to task</label> | ||||
| 				<div class="form-wrap"> | ||||
| 					<form action="/projects/{{task.id}}" method="POST"> | ||||
| 						<div class="form-input"> | ||||
| 							<label for="username" class="label">Username:</label> | ||||
| 							<input type="text" name="username" id="username" required /> | ||||
| 						</div> | ||||
| 						<div class="btn-wrap"> | ||||
| 							<button class="btn">Submit</button> | ||||
| 						</div> | ||||
| 					</form> | ||||
| 				</div> | ||||
| 			</div> | ||||
| 		</section> | ||||
|                 <h1> Users added to this task </h1> | ||||
|  | ||||
| 			{% for user in users %} | ||||
| 				<li>{{user.username}}, {{user.contact}}</li> | ||||
| 			{% endfor %} | ||||
|  | ||||
|                 <h1> Add yourself to task </h1> | ||||
| 		<form action="/projects/{{task.id}}" method="POST"> | ||||
| 			<label for="username">username</label> | ||||
| 			<input type="text" name="username" id="username" required> | ||||
| 			<button> Submit </button> | ||||
| 		</form> | ||||
|  | ||||
| 	</main> | ||||
| 	<footer> | ||||
| 	</footer> | ||||
|   | ||||
| @@ -1,20 +1,36 @@ | ||||
| <!DOCTYPE html> | ||||
| <html> | ||||
| <head> | ||||
| 	<meta charset="utf-8"> | ||||
| 	<meta name="viewport" content="width=device-width, initial-scale=1"> | ||||
| <head>	 | ||||
| 	<meta charset="utf-8" /> | ||||
| 	<meta name="viewport" content="width=device-width, initial-scale=1" /> | ||||
| 	<link rel="stylesheet" href="/static/style.css" /> | ||||
| 	<title>Register</title> | ||||
| 	<link rel="stylesheet" href="/static/style.css"> | ||||
| </head> | ||||
| <body> | ||||
| 	<main> | ||||
| 		<form action="/register" method="POST"> | ||||
| 			<label for="username">username</label> | ||||
| 			<input type="text" name="username" id="username" required> | ||||
| 			<label for="contact">contact</label> | ||||
| 			<input type="text" name="contact" id="contact" required> | ||||
| 			<button> Submit </button> | ||||
| 		</form> | ||||
| 	<header> | ||||
| 		<nav class="container"> | ||||
| 			<ul> | ||||
| 				<li><a href="/">Home</a></li> | ||||
| 				<li class="current"><a href="/register">Register</a></li> | ||||
| 			</ul> | ||||
| 		</nav> | ||||
| 	</header> | ||||
| 	<main class="container page page-register"> | ||||
| 		<div class="form-wrap"> | ||||
| 			<form action="/register" method="POST"> | ||||
| 				<div class="form-input"> | ||||
| 					<label for="username">Username:</label> | ||||
| 					<input type="text" name="username" id="username" required /> | ||||
| 				</div> | ||||
| 				<div class="form-input"> | ||||
| 					<label for="contact">Contact:</label> | ||||
| 					<input type="text" name="contact" id="contact" required /> | ||||
| 				</div> | ||||
| 				<div class="btn-wrap"> | ||||
| 					<button class="btn">Submit</button> | ||||
| 				</div> | ||||
| 			</form> | ||||
| 		</div> | ||||
| 	</main> | ||||
| </body> | ||||
| </html> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user