From 51ff40596015cd2f61e9f2dfce24e707ed92740e Mon Sep 17 00:00:00 2001 From: Adnan Memic Date: Fri, 13 Mar 2020 11:29:27 +0000 Subject: [PATCH] averages added --- image.png | Bin 0 -> 22326 bytes location_app/app/functions/auth/base.py | 17 +-- .../app/functions/auth/change_password.py | 10 +- .../app/functions/auth/create_profile.py | 6 +- .../app/functions/data_tools/data_getter.py | 8 +- location_app/app/mqtt/__init__.py | 4 +- location_app/app/mqtt/mqtt_message_handler.py | 18 +-- location_app/app/routes/__init__.py | 6 +- location_app/app/routes/average.py | 10 ++ location_app/app/routes/images.py | 10 -- location_app/app/routes/main.py | 3 +- location_app/app/routes/picture.py | 11 ++ location_app/app/routes/profile.py | 5 +- location_app/app/static/css/average/index.css | 0 location_app/app/static/css/base.css | 7 +- location_app/app/static/css/base_page.css | 39 +++--- location_app/app/static/css/buttons.css | 119 +++++++++++++++++ location_app/app/static/css/login/create.css | 12 +- location_app/app/static/css/login/forgot.css | 9 +- location_app/app/static/css/login/index.css | 32 ++--- location_app/app/static/css/picture/index.css | 0 location_app/app/static/css/profile/index.css | 125 ++++++++++++++++++ location_app/app/static/img/favicon.ico | Bin 0 -> 15406 bytes location_app/app/static/img/picture/first.png | Bin 0 -> 4076 bytes .../app/static/img/picture/second.png | Bin 0 -> 4076 bytes location_app/app/static/js/average/index.js | 0 location_app/app/static/js/map/index.js | 8 +- location_app/app/static/js/{map => }/math.js | 6 +- location_app/app/static/js/picture/index.js | 0 location_app/app/static/js/profile/index.js | 61 +++++++++ location_app/app/static/js/test.js | 4 + location_app/app/templates/average/index.html | 44 ++++++ location_app/app/templates/base.html | 4 +- location_app/app/templates/base_page.html | 28 ++-- location_app/app/templates/login/create.html | 6 +- location_app/app/templates/login/forgot.html | 2 +- location_app/app/templates/login/index.html | 16 ++- location_app/app/templates/main/index.html | 12 +- location_app/app/templates/map/index.html | 15 +-- location_app/app/templates/picture/index.html | 18 +++ location_app/app/templates/profile/index.html | 110 +++++++++++++-- 41 files changed, 614 insertions(+), 171 deletions(-) create mode 100644 image.png create mode 100644 location_app/app/routes/average.py delete mode 100644 location_app/app/routes/images.py create mode 100644 location_app/app/routes/picture.py create mode 100644 location_app/app/static/css/average/index.css create mode 100644 location_app/app/static/css/buttons.css create mode 100644 location_app/app/static/css/picture/index.css create mode 100644 location_app/app/static/img/favicon.ico create mode 100644 location_app/app/static/img/picture/first.png create mode 100644 location_app/app/static/img/picture/second.png create mode 100644 location_app/app/static/js/average/index.js rename location_app/app/static/js/{map => }/math.js (93%) create mode 100644 location_app/app/static/js/picture/index.js create mode 100644 location_app/app/static/js/profile/index.js create mode 100644 location_app/app/static/js/test.js create mode 100644 location_app/app/templates/average/index.html create mode 100644 location_app/app/templates/picture/index.html diff --git a/image.png b/image.png new file mode 100644 index 0000000000000000000000000000000000000000..1a1237df355d8d071162c5f790453e042f1e9aeb GIT binary patch literal 22326 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 literal 0 HcmV?d00001 diff --git a/location_app/app/functions/auth/base.py b/location_app/app/functions/auth/base.py index c7f8e0b..494fcab 100644 --- a/location_app/app/functions/auth/base.py +++ b/location_app/app/functions/auth/base.py @@ -1,18 +1,19 @@ import sqlite3 as sql from datetime import datetime +"""Validation for fields""" -database_user = "app/databases/users.db" +database_user = "app/databases/users.db" # Taking the databases database_locations = 'app/databases/locations.db' def create(): with sql.connect(database_user) as cur: - try: + try: # Tries the sql table cur.execute("CREATE TABLE UserDatabase(username VARCHAR2(20), password VARCHAR2(20), realname VARCHAR2(20), dob VARCHAR2(20), weight VARCHAR2(20));") except: pass -def user_exists(username): +def user_exists(username): # Checks for username with sql.connect(database_user) as cur: com = f"SELECT count(*) FROM UserDatabase WHERE username='{username}';" print(com) @@ -22,7 +23,7 @@ def user_exists(username): else: return True -def tid_exists(username): +def tid_exists(username): # Checks for tid with sql.connect(database_locations) as cur: com = f"SELECT count(*) FROM Location WHERE tid='{username}';" print(com) @@ -32,7 +33,7 @@ def tid_exists(username): else: return True -def compare(username, value_in, value_type): +def compare(username, value_in, value_type): # Comparing with sql.connect(database_user) as cur: com = f"SELECT {value_type} FROM UserDatabase WHERE username='{username}';" print(com) @@ -43,14 +44,14 @@ def compare(username, value_in, value_type): else: return False -def check_month(month, day): +def check_month(month, day): # Checks the month and day if month in [1, 3, 5, 7, 8, 10, 12]: if (day > 0 and day <= 31): return True else: return False elif month == 2: - if (day > 0 and day <= 28): + if (day > 0 and day <= 28): # Checking February return True else: return False @@ -60,7 +61,7 @@ def check_month(month, day): else: return False -def check_date(day, month, year): +def check_date(day, month, year): # Checks full date today = datetime.today().strftime('%Y-%m-%d').split("-") if int(year) > int(today[0]): return False diff --git a/location_app/app/functions/auth/change_password.py b/location_app/app/functions/auth/change_password.py index c7148f1..107a648 100644 --- a/location_app/app/functions/auth/change_password.py +++ b/location_app/app/functions/auth/change_password.py @@ -1,17 +1,17 @@ import sqlite3 as sql -from app.functions.auth import base +from app.functions.auth import base # Imports base for later use database_user = "app/databases/users.db" -def change_password(data): +def change_password(data): # Changing password base.create() _status = check_pass_data(data) if _status == "success": new_password(data) return _status -def check_pass_data(data): +def check_pass_data(data): # Checking password data _status = check_empty(data) if _status == "ok": if base.tid_exists(data['username']): @@ -26,7 +26,7 @@ def check_pass_data(data): return _status -def check_empty(data): +def check_empty(data): # Checks the entry to see if empty if data['username'] == "": return "empty_id" elif data['day'] == "0": @@ -42,7 +42,7 @@ def check_empty(data): else: return "ok" -def new_password(data): +def new_password(data): # Updates database with new password con = sql.connect(database_user) cur = con.cursor() com = f"UPDATE UserDatabase SET password='{data['password']}' WHERE username='{data['username']}';" diff --git a/location_app/app/functions/auth/create_profile.py b/location_app/app/functions/auth/create_profile.py index 26da05f..7b925c5 100644 --- a/location_app/app/functions/auth/create_profile.py +++ b/location_app/app/functions/auth/create_profile.py @@ -1,17 +1,17 @@ -import sqlite3 as sql +import sqlite3 as sql # Imports sql for use within database from app.functions.auth import base database_user = "app/databases/users.db" -def create_profile(data): +def create_profile(data): # Creating new data for a new user base.create() _status = check_prof_data(data) if _status == "success": make_user(data) return _status -def check_prof_data(data): +def check_prof_data(data): # Checking new print(data) _status = check_empty(data) if _status == "ok": diff --git a/location_app/app/functions/data_tools/data_getter.py b/location_app/app/functions/data_tools/data_getter.py index 34dbd1c..128e11e 100644 --- a/location_app/app/functions/data_tools/data_getter.py +++ b/location_app/app/functions/data_tools/data_getter.py @@ -2,15 +2,15 @@ import sqlite3 as sql import time -database_user = "app/databases/users.db" +database_user = "app/databases/users.db" # Grabs the database database_locations = "app/databases/locations.db" # user -def get_user_for(username): +def get_user_for(username): with sql.connect(database_user) as cur: - res = cur.execute(f"SELECT * FROM UserDatabase WHERE username='{username}';").fetchone()[0] - return res + res = cur.execute(f"SELECT username, realname, dob, weight FROM UserDatabase WHERE username='{username}';").fetchone() + return [res, get_filtered_data_for(username)] # Returns required data diff --git a/location_app/app/mqtt/__init__.py b/location_app/app/mqtt/__init__.py index 8056420..ba52a04 100644 --- a/location_app/app/mqtt/__init__.py +++ b/location_app/app/mqtt/__init__.py @@ -1,4 +1,4 @@ -from flask_mqtt import Mqtt +from flask_mqtt import Mqtt # MQTT using flask from app.mqtt import mqtt_message_handler def init_app(app): @@ -6,7 +6,7 @@ def init_app(app): @mqtt.on_connect() def handle_connect(client, userdata, flags, rc): - mqtt.subscribe('owntracks/4009user/#') + mqtt.subscribe('owntracks/4009user/#') #owntracks subscribing to mqtt @mqtt.on_message() def handle_mqtt_message(client, userdata, msg): diff --git a/location_app/app/mqtt/mqtt_message_handler.py b/location_app/app/mqtt/mqtt_message_handler.py index 12b6bd9..3195779 100644 --- a/location_app/app/mqtt/mqtt_message_handler.py +++ b/location_app/app/mqtt/mqtt_message_handler.py @@ -1,4 +1,4 @@ -from geopy.geocoders import Nominatim +from geopy.geocoders import Nominatim # Imports nominatim API import sqlite3 as sql import json, os, time @@ -6,28 +6,28 @@ import json, os, time database_locations = 'app/databases/locations.db' def getMsg(msg): - con = sql.connect(database_locations) + con = sql.connect(database_locations) # connecys to db, amkes cursor cur = con.cursor() - geolocator = Nominatim(user_agent="Web_app") - try: + geolocator = Nominatim(user_agent="Web_app") # starts nominatim + try: # Tries SQL to create table cur.execute("CREATE TABLE Location(tid VARCHAR2(2), longitude NUMBER(10,6), latitude NUMBER(10,6), city VARCHAR2(20), road VARCHAR2(30), date VARCHAR2(20), time VARCHAR2(20), tst INT(15));") except: pass - data = json.loads(msg.payload.decode("utf8")) + data = json.loads(msg.payload.decode("utf8")) tid = data["tid"] lat = data["lat"] lon = data["lon"] location = geolocator.reverse(f"{data['lat']},{data['lon']}") - city = location.raw["address"]["city"] + city = location.raw["address"]["city"] # Puts data into small array to be used later road = location.raw["address"]["road"] tst = data["tst"] - _time = time.strftime('%H:%M:%S', time.localtime(tst)) + _time = time.strftime('%H:%M:%S', time.localtime(tst))#sets time format _date = time.strftime('%d-%m-%Y', time.localtime(tst)) com = f"INSERT INTO Location values('{tid}','{lon}','{lat}','{city}','{road}','{_date}','{_time}','{tst}');" print(com) cur.execute(com) - con.commit() + con.commit() # commits changes to db cur.close() - con.close() + con.close()# # closes connection \ No newline at end of file diff --git a/location_app/app/routes/__init__.py b/location_app/app/routes/__init__.py index c5e743c..2764b46 100644 --- a/location_app/app/routes/__init__.py +++ b/location_app/app/routes/__init__.py @@ -3,7 +3,8 @@ from .main import main_bl from .map import map_bl from .login import login_bl from .profile import prof_bl -from .images import images_bl +from .average import average_bl +from .picture import picture_bl def init_app(app): app.register_blueprint(index_bl) @@ -11,4 +12,5 @@ def init_app(app): app.register_blueprint(map_bl, url_prefix="/map") app.register_blueprint(login_bl, url_prefix="/login") app.register_blueprint(prof_bl, url_prefix="/profile") - app.register_blueprint(images_bl, url_prefix="/images") \ No newline at end of file + app.register_blueprint(average_bl, url_prefix="/average") + app.register_blueprint(picture_bl, url_prefix="/picture") \ No newline at end of file diff --git a/location_app/app/routes/average.py b/location_app/app/routes/average.py new file mode 100644 index 0000000..36c22f2 --- /dev/null +++ b/location_app/app/routes/average.py @@ -0,0 +1,10 @@ +from flask import Blueprint, render_template, request, url_for, escape, redirect, session +from app.functions.data_tools import data_getter + +average_bl = Blueprint('average', __name__) + + +@average_bl.route("/", methods = ["GET"]) +def index(): + return render_template("average/index.html", + locations = data_getter.get_locations_for(session['username'])) diff --git a/location_app/app/routes/images.py b/location_app/app/routes/images.py deleted file mode 100644 index 6db5c06..0000000 --- a/location_app/app/routes/images.py +++ /dev/null @@ -1,10 +0,0 @@ -from flask import Blueprint, url_for, send_file - -images_bl = Blueprint('images', __name__) - -# @images_bl.route("/", methods = ["GET", "POST"]) - - -@images_bl.route("/dot", methods = ["GET"]) -def dot(): - return send_file('static/img/dot.svg') diff --git a/location_app/app/routes/main.py b/location_app/app/routes/main.py index d29323c..dfaa3ec 100644 --- a/location_app/app/routes/main.py +++ b/location_app/app/routes/main.py @@ -5,7 +5,8 @@ main_bl = Blueprint('main', __name__) @main_bl.route("/") def index(): - return render_template("main/index.html", locations = data_getter.get_locations_for(session['username'])) + return render_template("main/index.html", + locations = data_getter.get_locations_for(session['username'])) @main_bl.route("/logout") def logout(): diff --git a/location_app/app/routes/picture.py b/location_app/app/routes/picture.py new file mode 100644 index 0000000..6e744ea --- /dev/null +++ b/location_app/app/routes/picture.py @@ -0,0 +1,11 @@ +from flask import Blueprint, render_template, request, url_for, escape, redirect, session +from app.functions.data_tools import data_getter + +picture_bl = Blueprint('picture', __name__) + + +@picture_bl.route("/", methods = ["GET"]) +def index(): + return render_template("picture/index.html", + user = session['username']) + diff --git a/location_app/app/routes/profile.py b/location_app/app/routes/profile.py index b38044d..d0ba9a0 100644 --- a/location_app/app/routes/profile.py +++ b/location_app/app/routes/profile.py @@ -5,4 +5,7 @@ prof_bl = Blueprint('prof', __name__) @prof_bl.route("/", methods = ["GET", "POST"]) def index(): - return render_template("profile/index.html") + return render_template("profile/index.html", + user = data_getter.get_user_for(session['username']), + locations = data_getter.get_map_locations_for(session['username']), + dates = data_getter.get_map_location_dates(session['username'])) diff --git a/location_app/app/static/css/average/index.css b/location_app/app/static/css/average/index.css new file mode 100644 index 0000000..e69de29 diff --git a/location_app/app/static/css/base.css b/location_app/app/static/css/base.css index 4cfbac5..5cb12b9 100644 --- a/location_app/app/static/css/base.css +++ b/location_app/app/static/css/base.css @@ -3,10 +3,11 @@ padding: 0; } body { - background-image: url('../img/earth.jpg'); - background-repeat: no-repeat; +/* background-image: url('../img/earth.jpg'); */ + background-color: #3EA4E8; +/* background-repeat: no-repeat; background-attachment: fixed; - background-size: cover; + background-size: cover; */ font-family: Gill Sans, sans-serif; font-variant: small-caps; display: grid; diff --git a/location_app/app/static/css/base_page.css b/location_app/app/static/css/base_page.css index 8f1f1a5..77835d2 100644 --- a/location_app/app/static/css/base_page.css +++ b/location_app/app/static/css/base_page.css @@ -2,42 +2,35 @@ background-color: white; grid-area: container; display: grid; - grid-template-columns: 1fr 4fr 4fr 4fr 4fr 1fr; + grid-template-columns: 1fr 16fr 1fr; grid-template-rows: 1.5fr auto 1.5fr 5fr 1.5fr auto 1.5fr; grid-template-areas: - '. . . . . .' - '. title title title title .' - '. . . . . .' - '. b_1 b_2 b_3 b_4 .' - '. . . . . .' - '. c_main c_main c_main c_main .' - '. . . . . .'; + '. . .' + '. title .' + '. . .' + '. btnss .' + '. . .' + '. c_main .' + '. . .'; } .title { grid-area: title; display: grid; } +.btnss { + grid-area: btnss; + grid-template-columns: 1fr 0.2fr 1fr 0.2fr 1fr 0.2fr 1fr; + grid-template-rows: 1fr; + display: grid; + grid-template-areas: + 'b_1 . b_2 . b_3 . b_4' +} .title_text { margin: 20px; justify-self: center; align-self: center; font-size: 7vw; } -.button_main { - text-align: center; - display: grid; -} -.main_button { - justify-self: center; - align-self: center; - width: 80%; - font-size: 2vw; - border-radius: 10em; - padding: 0.5vh; -} -.danger { - background-color: #ff5252; -} .button_profile { grid-area: b_1; } diff --git a/location_app/app/static/css/buttons.css b/location_app/app/static/css/buttons.css new file mode 100644 index 0000000..9fe4df1 --- /dev/null +++ b/location_app/app/static/css/buttons.css @@ -0,0 +1,119 @@ +* { + box-sizing: border-box; +} + +a[class*="btn"] {text-decoration: none;} +input[class*="btn"], +button[class*="btn"] { + border: 0; + font-family: Gill Sans, sans-serif; + font-variant: small-caps; +} + +.btn-3d { + position: relative; + display: inline-block; + font-size: 2vw; + padding: 20px 0; + width: 100%; + color: white; + margin: 10px 0; + border-radius: 6px; + text-align: center; + transition: top .01s linear; + text-shadow: 0 1px 0 rgba(0,0,0,0.15); +} + +.btn-3d.red:hover {background-color: #e74c3c;} +.btn-3d.blue:hover {background-color: #699DD1;} +.btn-3d.green:hover {background-color: #80C49D;} +.btn-3d.purple:hover {background-color: #D19ECB;} +.btn-3d.yellow:hover {background-color: #F0D264;} +.btn-3d.cyan:hover {background-color: #82D1E3;} + +.btn-3d:active { + top: 9px; +} +.btn-3d.red { + background-color: #e74c3c; + box-shadow: 0 0 0 1px #c63702 inset, + 0 0 0 2px rgba(255,255,255,0.15) inset, + 0 8px 0 0 #C24032, + 0 8px 0 1px rgba(0,0,0,0.4), + 0 8px 8px 1px rgba(0,0,0,0.5); +} +.btn-3d.red:active { + box-shadow: 0 0 0 1px #c63702 inset, + 0 0 0 2px rgba(255,255,255,0.15) inset, + 0 0 0 1px rgba(0,0,0,0.4); +} + +.btn-3d.blue { + background-color: #6DA2D9; + box-shadow: 0 0 0 1px #6698cb inset, + 0 0 0 2px rgba(255,255,255,0.15) inset, + 0 8px 0 0 rgba(110, 164, 219, .7), + 0 8px 0 1px rgba(0,0,0,.4), + 0 8px 8px 1px rgba(0,0,0,0.5); +} +.btn-3d.blue:active { + box-shadow: 0 0 0 1px #6191C2 inset, + 0 0 0 2px rgba(255,255,255,0.15) inset, + 0 0 0 1px rgba(0,0,0,0.4); +} + +.btn-3d.green { + background-color: #82c8a0; + box-shadow: 0 0 0 1px #82c8a0 inset, + 0 0 0 2px rgba(255,255,255,0.15) inset, + 0 8px 0 0 rgba(126, 194, 155, .7), + 0 8px 0 1px rgba(0,0,0,.4), + 0 8px 8px 1px rgba(0,0,0,0.5); +} +.btn-3d.green:active { + box-shadow: 0 0 0 1px #82c8a0 inset, + 0 0 0 2px rgba(255,255,255,0.15) inset, + 0 0 0 1px rgba(0,0,0,0.4); +} + +.btn-3d.purple { + background-color: #cb99c5; + box-shadow: 0 0 0 1px #cb99c5 inset, + 0 0 0 2px rgba(255,255,255,0.15) inset, + 0 8px 0 0 rgba(189, 142, 183, .7), + 0 8px 0 1px rgba(0,0,0,.4), + 0 8px 8px 1px rgba(0,0,0,0.5); +} +.btn-3d.purple:active { + box-shadow: 0 0 0 1px #cb99c5 inset, + 0 0 0 2px rgba(255,255,255,0.15) inset, + 0 0 0 1px rgba(0,0,0,0.4); +} + +.btn-3d.cyan { + background-color: #7fccde; + box-shadow: 0 0 0 1px #7fccde inset, + 0 0 0 2px rgba(255,255,255,0.15) inset, + 0 8px 0 0 rgba(102, 164, 178, .6), + 0 8px 0 1px rgba(0,0,0,.4), + 0 8px 8px 1px rgba(0,0,0,0.5); +} +.btn-3d.cyan:active { + box-shadow: 0 0 0 1px #7fccde inset, + 0 0 0 2px rgba(255,255,255,0.15) inset, + 0 0 0 1px rgba(0,0,0,0.4); +} + +.btn-3d.yellow { + background-color: #F0D264; + box-shadow: 0 0 0 1px #F0D264 inset, + 0 0 0 2px rgba(255,255,255,0.15) inset, + 0 8px 0 0 rgba(196, 172, 83, .7), + 0 8px 0 1px rgba(0,0,0,.4), + 0 8px 8px 1px rgba(0,0,0,0.5); +} +.btn-3d.yellow:active { + box-shadow: 0 0 0 1px #F0D264 inset, + 0 0 0 2px rgba(255,255,255,0.15) inset, + 0 0 0 1px rgba(0,0,0,0.4); +} \ No newline at end of file diff --git a/location_app/app/static/css/login/create.css b/location_app/app/static/css/login/create.css index e53d19b..54cd98e 100644 --- a/location_app/app/static/css/login/create.css +++ b/location_app/app/static/css/login/create.css @@ -50,10 +50,8 @@ } .form_inside { display: grid; - justify-content: start; - align-content: center; grid-template-columns: 2fr 2fr; - grid-template-rows: 0.25fr 1.5fr 0.15fr 1.5fr 0.15fr 1.5fr 0.15fr 1.5fr 0.15fr 1.5fr 1.5fr 1.5fr; + grid-template-rows: 0.25fr 1.5fr 0.15fr 1.5fr 0.15fr 1.5fr 0.15fr 1.5fr 0.15fr 1.5fr 1.5fr auto; grid-template-areas: '. .' 'user user' @@ -66,7 +64,7 @@ '. .' 'pass pass' 'r_pass r_pass' - '. c_button'; + 'c_button c_button'; } .username { display: grid; @@ -125,15 +123,9 @@ grid-area: r_pass; } .create_button_area { - display: grid; - justify-content: end; align-content: center; grid-area: c_button; } -.create_button { - font-size: 1.5vw; - border-radius: 10em; -} .error_text { color: red; font-size: 1.5vw; diff --git a/location_app/app/static/css/login/forgot.css b/location_app/app/static/css/login/forgot.css index 64c4dbd..9df056d 100644 --- a/location_app/app/static/css/login/forgot.css +++ b/location_app/app/static/css/login/forgot.css @@ -49,10 +49,8 @@ } .form_inside { display: grid; - justify-content: start; - align-content: center; grid-template-columns: 2fr 2fr; - grid-template-rows: 0.5fr 1.5fr 0.5fr 1.5fr 0.5fr 1.5fr 1.5fr 1fr; + grid-template-rows: 0.5fr 1.5fr 0.5fr 1.5fr 0.5fr 1.5fr 1.5fr auto; grid-template-areas: '. .' 'user user' @@ -61,7 +59,7 @@ '. .' 'pass pass' 'r_pass r_pass' - '. forgot_button'; + 'forgot_button forgot_button'; } .username { display: grid; @@ -100,9 +98,6 @@ grid-area: r_pass; } .forgot_button_area { - display: grid; - justify-content: end; - align-content: center; grid-area: forgot_button; } .forgot_button { diff --git a/location_app/app/static/css/login/index.css b/location_app/app/static/css/login/index.css index d52d2d6..6b09b89 100644 --- a/location_app/app/static/css/login/index.css +++ b/location_app/app/static/css/login/index.css @@ -52,16 +52,25 @@ justify-content: start; align-content: center; grid-template-columns: 2fr 2fr; - grid-template-rows: 0.5fr 1.5fr 0.5fr 1.5fr 0.5fr 1.5fr 1.5fr; +/* grid-template-rows: 0.5fr 1.5fr 0.5fr 1.5fr 0.5fr 1.5fr 1.5fr; */ + grid-template-rows: 20px auto 20px auto 20px auto auto; grid-template-areas: '. .' 'user user' '. .' 'pass pass' '. .' - 'f_pass login_button' + 'btns btns' 'c_acc c_acc'; } +.btns { + display: grid; + grid-area: btns; + grid-template-columns: 1fr 1fr 0.2fr 1fr; + + grid-template-areas: + 'f_pass f_pass . login_button'; +} .username { display: grid; justify-content: center stretch; @@ -83,33 +92,14 @@ font-size: 2vw; } .login_button_area { - display: grid; - justify-content: end; - align-content: center; grid-area: login_button; } -.login_button { - font-size: 2vw; - border-radius: 10em; -} .fpass_area { - display: grid; - justify-content: start; - align-content: center; grid-area: f_pass; } -.fpass_text { - font-size: 2vw; -} .cacc_area { - display: grid; - justify-content: center; - align-content: center; grid-area: c_acc; } -.cacc_text { - font-size: 2vw; -} .error_text { color: red; font-size: 1.5vw; diff --git a/location_app/app/static/css/picture/index.css b/location_app/app/static/css/picture/index.css new file mode 100644 index 0000000..e69de29 diff --git a/location_app/app/static/css/profile/index.css b/location_app/app/static/css/profile/index.css index e69de29..8547669 100644 --- a/location_app/app/static/css/profile/index.css +++ b/location_app/app/static/css/profile/index.css @@ -0,0 +1,125 @@ +.content_main { + display: grid; + grid-template-columns: 0.5fr 0.5fr 0.5fr 0.5fr; + grid-template-rows: 1fr 0.5fr 0.5fr 1fr 0.5fr 1fr 0.5fr 1fr 0.5fr 0.5fr 1fr 0.5fr 1fr; + grid-template-areas: + 'p_title p_title p_title p_title' + '. . . .' + 'ID name p_pic p_pic' + 'ID1 name1 p_pic p_pic' + 'date type p_pic p_pic' + 'date1 type1 p_pic p_pic' + 'colorr weight p_pic p_pic' + 'colorr1 weight1 p_pic p_pic' + '. . . .' + 'city tcal cal speed' + 'city1 tcal1 cal1 speed1' + 'street tdist dist .' + 'street1 tdist1 dist1 .'; +} +.p_title { + grid-area: p_title; + text-align: center; + font-size: 5vw; +} +.p_pic { + grid-area: p_pic; + display: grid; + justify-items: center; +} +.p_pic img { + object-fit: cover; + width: 70%; + max-height: 100%; +} +.label { + font-size: 2vw; +} +.info { + font-size: 3vw; +} +.ID { + grid-area: ID; +} +.name { + grid-area: name; +} +.date { + grid-area: date; +} +.color { + grid-area: colorr; +} +.weight { + grid-area: weight; +} +.city { + grid-area: city; +} +.street { + grid-area: street; +} +.cal { + grid-area: cal; +} +.type { + grid-area: type; +} +.speed { + grid-area: speed; +} +.dist { + grid-area: dist; +} +.tdist { + grid-area: tdist; +} +.tcal { + grid-area: tcal; +} +.ID1 { + grid-area: ID1; +} +.name1 { + grid-area: name1; +} +.date1 { + grid-area: date1; +} +.weight1 { + grid-area: weight1; +} +.color1 { + grid-area: colorr1; +} +.city1 { + grid-area: city1; +} +.street1 { + grid-area: street1; +} +.cal1 { + grid-area: cal1; +} +.tcal1 { + grid-area: tcal1; +} +.type1 { + grid-area: type1; +} +.speed1 { + grid-area: speed1; +} +.dist1 { + grid-area: dist1; +} +.tdist1 { + grid-area: tdist1; +} +.ccolor { + margin: 0 15px 0 0; + width: 2vw; + height: 2vw; + display: inline-block; + border-radius: 100%; +} \ No newline at end of file diff --git a/location_app/app/static/img/favicon.ico b/location_app/app/static/img/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..b200897288e0f3262d497adc6d271f4f0710dad1 GIT binary patch literal 15406 zcmeHOYj9M@m7Zj?>#XD2JT|U4siexaReAi#rd-)7*H+i{#-ue0k-j0H%Thj|*? zyh6+y^DHob@jb>y8C?R^y$;5&uN)VUoicR>1$szp?=Ub=SwEj!zPpI!3U%7Kl-}K z^d7!F^ib^gADB#~_nS;VLK}2JkLY()f3`m%#21_m)_-=|EeoACOK#BH*xVKH9*hKi zsl6SpZ>facZughb?pIEmb(6c%I?vT;8RxQm^-TyM$~ z-QFrK9Q4!#eU6FZ!g{;0vJp7pRg-UJd5H19V7h!#yoR)yvWI0thq{F6QQz= zVr%{?u>(c+KmPuBaq&os=uAL=;oeleKik?s_xUqR#k`zlVjAj>f>$)sEcjr2Tm~xr zw+>7Y|F(US_!-K!>_u8%`DSt8{Aw{D{a-}M$y=zU?M~I(6ds9=q4p?F(EoK^{z1sTtZ2Phetd!U{-FuN3%Yu{ z6VC}(eOWK`M+@e!7VVd|3vb0K&1JLLp=&21en)4It3>qLvqXQzE?xdzCnk$v{z~C1 z*)QC+7yBLcmKUA&ir1mfhg%vdraBzu-<7(KHSxtxzxQ7v0q>G<(0eZEuIWX)T9mDx zrphOSH8o$6ZIh`vUNY_e(rsvG9z=N*h4yLeZ{!jP*$VG-)>)r|Zfx^8>&qj-)+6CS z>$Grt`}amZTC@lC#no8x6WV3t7=?v}Uvk?k{?*lJT?v|(oObIcD1yb;Ty+cjDq;n; z*V_O*JG+AJry~*PSB+z-@6ENAe`>K=W`SmAi{08K$8TXGzuG&k&SN6ULoL?upvY(II7}z3yXB+T- zk##%xB%MSh7q&l;W2Ap)AJc83`3=!mb4XlkIx7NICqMNUZV{bl=3=~*gkyTF*-;tT zt+(7Y7lv#{JQ=XP&!x}S{D!?x?xV(Du)K$Ppf5{bn)){v^(55h?3vo5(0AFF^#SNUby?2CQ2PH;Y^|z&>DSIZJY8Fl zb=C>rpL1MNv`)-AvrI&QXMao|q%4S4?a$}`fiC4h2E);(o%%iI%h)#${Vt!Jsr4$h zmwx<9;FmH<$C*abW=&gV9OE~zVOHqDC7e-)l0VN8oGaR?-vaM1Aw$}Y^*9%VmGvjr zVL#-M346Q=dVe?i#Pc7(uo~-mDEd5O&|V#c4zLaP9ceFA{g?DvZ^s#oXOa1^%Mydi zKi3e?J{!OTZRv3Gm%k;dhoXNC^KjwfI#GZ%`ATjS1L;$a??UJDm2;gsuBR%G`@crt zgSx2xHsCpHJp8W(qO*MOr#I?85H~Ge`!hq5x# zji1p<-(!40=e@b!@(ldkPl>^6$%3DjF5Ec#^PR=jP;ncj8h+}VZb$9Ykq*xvfFU0- zj6NL;{b9co{$H86Za*RVEBEMFNI#r~eIswNXfJwOcq&eVrX@Zu&W0ZNx~cSiK_^Gj zi`A_yHtRw7rm3#F@&Pdtw&$M^?k`^rdLIXl&G3D#z;avSiL^Hgf9=PgI_t|+dh~BW z$Fh*VHsdnUkxV8V&KT~7idpc_XS3v)vi9MAmAL0iubzK3^?nub@pCTAcI)3c5TED8(w_A4uLv>>M6*mzNTu1!$8yH)oPQafz z1sUscGZiah=Zt|1Pi3xXE7_;}dXem@qOWYDcB3|3TyvZg-L2J#-!%@1nSlq%({;?x zsZPIpHsXsv?hUyg@cXUz`mNS`-8SYsOINF9&h{={hxQ5PkZ;UhB!Y4ny|KWPj>L=b4v=K6Av*35=aF4$^Uap!^5m z$GKzBJ9z4=-mm8guX-y*xV7$9@)5O+8lR@{6{tUvKh==&ME#ijxt=r+em$jkhHxX@qGvL2X{9bcrQrOv_ zInDhzL;iBt6tOjTsm55t$goG}hHHm9I26vIz8moCbHQ&zwNLcjfjM{t_@6nxNMoEt zjbS9q%iZu(PM*vZL48#*d>;7Q5wCm{_Q-p!l#G=zR&-v8*Ng@~^=4Ttj;i8kjCMI< zb~08jv9s<%Y;niARiXy`soxXn&l&}{#Ls&MjG0Lt8V&wV$e;NF&Z&x@@zukKH_AAu zij%Qt-f38xw_Jo3Ta^g^3I#vo%P(Ut7^h~g%^r)>js`#Pft-==pp09 zj9KR#og~T&R%uPhwFG1FXYK`zze@bP7c&R(U>O5tu8#LxhQiPL7MBqVroI=W{s{RQ zc?Uz<(9a@&>J4M~oKMarZL`t;=>zW9&aM>9myjo}*8uoh7>l2hhbhn_cgfKBnG@yS zxL|KIuFLtBxMe+3{KS3~<35epH^<{z;x{AyZpi-SSiE@#a26rPugL%{uOe!=8Q?gQ?y2-jgjk>^>Nsk zDF&HK{Is*_7gmd7$Zz!&NBuYY2QR_i&@NC$r1J~d=UmKt8+hWpNbIbW!A~7zev5mb zid%jD&7LV@8tmsq=(&oYIVk2oXTYu!_e2!RoMj1gXC?Nz#n=lf3Rh|o_@Ak;#ZN#U zPhnow@tL3D-8u3wQv5~mogRk_)bWhZ+`s65ZovAq7e{l{`zZ)n`+~$R>)+i4Km7;Z?~r#Zqz(-yf391$ z+jb!Fx+Q+z3FTUIXQhcYoF9#TCEqV$P0+94dVL$d+tS>DdjNU38-C`h4?vF0&C-sz zV|mKq@Mq#)!*uXW|BP5E1Fi$+YiS!;evNtMJ%U!?rwv!vuKLU~SuV~sT(8uBDR)`l z4L|8WxpR_u0)>0$iNn!2$Z+_X7v(<1zAUfoOVxc4?!Q|wC(PIK&MnteBKxo6=QHmC z@LmS@;w7*-5_>Z8r>rLKiu!TIuqW~yIUIhrp>A;Pa}6_2BK3}Yx*UVwlEH6=E#m&W z1^d+^tmnJoCuZKU*bG_m{w()<`YI9w>*4UL?e6xR4E`JNmAMwS>G}9o`Z`Xg5GX4{feUYa`ZHN07#lLPy{Wt0o-|1f;flj>)dpZHO_X(UK zra|7>F`q};kD=&xAs&c3@j8CwcH?(0lgE$wJUvIhPw%TZu5~+0ZuK^tM4WKv7w@+C#X*y%X`zt>7toFI-|*Yt{dh7zfsf zMJV+7KMPKqS>g{g+sqG1{JhVg$4pO7gM44WGw+!1#9fDDn6C?JKfOOn zT8p^&O&ME`*5IYhE_&Rhh;`=b@!RMfgn@S=65@xoxB&od=TFI zR36;b=XL#Z)tAQQEPqFR3vupZ#(bF*X{j@RFC1?BZdbtfFnCzj74(##{$vm@{uc1l z5WU~gi2EH?@9Ogs$FJW-nWx{$=baVa)fj?)KQQDl-tTZY?qTi%x{!r$@pY_VjB)_a^IICNk2N(}zd0P< z;eKO2uRGB87C;{Vrm`gSXG8ajQ-%!pZ~$=@0puKc63q520- zd)4*4+K_kbu~gZcs#|sI)*L0fZ3B z0S;ZM0tqbylo}!lf}s<5`0jJvd*1u&t-IFU^T+I&+3Wkh*|TTX><;gK1^zHKG%*A? zH~@fSuK~Lh;0nOa$;HjZ$<58h&BMdZ%l8K#-~Ro4A_9l_{}2;7d{|5b3>KGCkP(-V zlLUj0o;)gdT=9hRi6b(qXH=EWC@7s!`US$l!^6YJ%O}joC#)n67FYUz+wNb0ATQ9* zApqi#1@;MYfCM>qTL8&Dksyv=2K+W|9$v0}9GsxNRii%u4iJcglbdHx{ek}u;MfP^ z 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 Sm!T)>;=hdklWxrJ$bSJ$I7$Hk literal 0 HcmV?d00001 diff --git a/location_app/app/static/img/picture/second.png b/location_app/app/static/img/picture/second.png new file mode 100644 index 0000000000000000000000000000000000000000..9650218be871a1ef496f8a73c85e9cbad7f67cf4 GIT binary patch literal 4076 zcmcgucU05Mw*FygBI2P1r7A@bL+K_kbu~gZcs#|sI)*L0fZ3B z0S;ZM0tqbylo}!lf}s<5`0jJvd*1u&t-IFU^T+I&+3Wkh*|TTX><;gK1^zHKG%*A? zH~@fSuK~Lh;0nOa$;HjZ$<58h&BMdZ%l8K#-~Ro4A_9l_{}2;7d{|5b3>KGCkP(-V zlLUj0o;)gdT=9hRi6b(qXH=EWC@7s!`US$l!^6YJ%O}joC#)n67FYUz+wNb0ATQ9* zApqi#1@;MYfCM>qTL8&Dksyv=2K+W|9$v0}9GsxNRii%u4iJcglbdHx{ek}u;MfP^ z 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 Sm!T)>;=hdklWxrJ$bSJ$I7$Hk literal 0 HcmV?d00001 diff --git a/location_app/app/static/js/average/index.js b/location_app/app/static/js/average/index.js new file mode 100644 index 0000000..e69de29 diff --git a/location_app/app/static/js/map/index.js b/location_app/app/static/js/map/index.js index 8283153..cb489d3 100644 --- a/location_app/app/static/js/map/index.js +++ b/location_app/app/static/js/map/index.js @@ -70,7 +70,7 @@ function center_map(points = 0) { ol.extent.extend(area, points[1].getSource().getExtent()); map.getView().fit(area, { size: map.getSize(), - maxZoom: 21.5 + maxZoom: 20 }); } } @@ -251,12 +251,12 @@ function get_dot_data(layer) { "Time: " + layer.get('time')]); } else { if(layer.get('special') == "start") { - show_alert(["This is Start!", + show_alert(["Your journey started here!", "Time: " + layer.get('time'), "Your total distance is: " + layer.get('total_distance'), "Your total calories are: " + layer.get('total_calories')]); - } else if(layer.get('special') == "start") { - show_alert(["This is End!", + } else if(layer.get('special') == "end") { + show_alert(["Your journey ended here!", "Time: " + layer.get('time'), "Your total distance is: " + layer.get('total_distance'), "Your total calories are: " + layer.get('total_calories')]); diff --git a/location_app/app/static/js/map/math.js b/location_app/app/static/js/math.js similarity index 93% rename from location_app/app/static/js/map/math.js rename to location_app/app/static/js/math.js index 966d9a9..e3b7a81 100644 --- a/location_app/app/static/js/map/math.js +++ b/location_app/app/static/js/math.js @@ -84,5 +84,9 @@ function get_calories(loc1, loc2) { } function format_calories(calories) { - return (Math.round(calories * 100) / 100) + " calories"; + if (calories > 1000) { + return (Math.round(calories / 10) / 100) + " kcal"; + } else { + return (Math.round(calories * 100) / 100) + " cal"; + } } \ No newline at end of file diff --git a/location_app/app/static/js/picture/index.js b/location_app/app/static/js/picture/index.js new file mode 100644 index 0000000..e69de29 diff --git a/location_app/app/static/js/profile/index.js b/location_app/app/static/js/profile/index.js new file mode 100644 index 0000000..fcf9a37 --- /dev/null +++ b/location_app/app/static/js/profile/index.js @@ -0,0 +1,61 @@ +var locations; +var weight; +var dates; +var distance = 0; +var calories = 0; +var tdistance = 0; +var tcalories = 0; +var tspeed = 0; +var color; + +function setup(_locations, _weight, _dates, _color) { + locations = _locations; + weight = _weight; + dates = _dates; + color = _color; + + window.onload = function(){ + cycle_through_dates(); + console.log(document.getElementById("qw").textContent); + document.getElementById("type").innerHTML = '

' + "Adventurer" + '

'; + document.getElementById("speed").innerHTML = '

' + format_speed(tspeed) + '

'; + document.getElementById("color").style.backgroundColor = color; + document.getElementById("tdist").innerHTML = '

' + format_distance(tdistance) + '

'; + document.getElementById("tcal").innerHTML = '

' + format_calories(tcalories) + '

'; + document.getElementById("cal").innerHTML = '

' + format_calories(calories) + '

'; + document.getElementById("dist").innerHTML = '

' + format_distance(distance) + '

'; + }; +} + +function cycle_through_dates() { + for(i = 0; i < dates.length; i++) { + var this_date_loc = []; + var this_date_dist = 0; + var this_date_cal = 0; + for(j = 0; j < locations.length; j++) { + if(locations[j][2] == dates[i]) { + this_date_loc.push(locations[j]); + } + } + for(j = 0; j < this_date_loc.length - 1; j++) { + var dis = get_distance(this_date_loc[j], this_date_loc[j + 1]); + this_date_dist += dis; + this_date_cal += get_calories(this_date_loc[j], this_date_loc[j + 1]); + var speed = get_speed(this_date_loc[j], this_date_loc[j + 1]); + var time = get_time(this_date_loc[j], this_date_loc[j + 1]); + if(speed > tspeed && dis < 100 && time > 2) { + tspeed = speed; + } else if(speed > tspeed && time > 10) { + tspeed = speed; + } + } + distance += this_date_dist; + calories += this_date_cal; + if(this_date_dist > tdistance) { + tdistance = this_date_dist; + } + if(this_date_cal > tcalories) { + tcalories = this_date_cal; + } + } +} diff --git a/location_app/app/static/js/test.js b/location_app/app/static/js/test.js new file mode 100644 index 0000000..6c6dbb7 --- /dev/null +++ b/location_app/app/static/js/test.js @@ -0,0 +1,4 @@ +function test() { + var a = document.getElementById("month") + console.log(a.options[a.selectedIndex].text); +} \ No newline at end of file diff --git a/location_app/app/templates/average/index.html b/location_app/app/templates/average/index.html new file mode 100644 index 0000000..35009de --- /dev/null +++ b/location_app/app/templates/average/index.html @@ -0,0 +1,44 @@ +{% extends 'base_page.html' %} + + +{% block title %} Average {% endblock %} + + +{% block js %} + + + + +{% endblock %} + + +{% block css %} + + + +{% endblock %} + + +{% block b1 %} +Home +{% endblock %} + +{% block b2 %} +Map +{% endblock %} + +{% block b3 %} +Profile +{% endblock %} + + + +{% block body %} +
+ Buttons +
+{% endblock %} + + + + diff --git a/location_app/app/templates/base.html b/location_app/app/templates/base.html index 189b647..2e5e397 100644 --- a/location_app/app/templates/base.html +++ b/location_app/app/templates/base.html @@ -8,7 +8,9 @@ {% block basejs %}{% endblock %} {% block title %}{% endblock %} - + + + {% block basecss %}{% endblock %} diff --git a/location_app/app/templates/base_page.html b/location_app/app/templates/base_page.html index 226fbee..b378c95 100644 --- a/location_app/app/templates/base_page.html +++ b/location_app/app/templates/base_page.html @@ -17,19 +17,21 @@

Trackmaster

-
- {% block b1 %}{% endblock %} -
-
- {% block b2 %}{% endblock %} -
-
- {% block b3 %}{% endblock %} -
-
-
- -
+
+
+ {% block b1 %}{% endblock %} +
+
+ {% block b2 %}{% endblock %} +
+
+ {% block b3 %}{% endblock %} +
+
+
+ +
+
{% block body %}{% endblock %}
diff --git a/location_app/app/templates/login/create.html b/location_app/app/templates/login/create.html index e343f4b..62cb865 100644 --- a/location_app/app/templates/login/create.html +++ b/location_app/app/templates/login/create.html @@ -5,6 +5,7 @@ {% block basejs %} + {% endblock %} @@ -22,6 +23,9 @@

Create Account

+
@@ -94,7 +98,7 @@ {% endif %}
- +
diff --git a/location_app/app/templates/login/forgot.html b/location_app/app/templates/login/forgot.html index faaa587..301eedf 100644 --- a/location_app/app/templates/login/forgot.html +++ b/location_app/app/templates/login/forgot.html @@ -80,7 +80,7 @@ {% endif %}
- +
diff --git a/location_app/app/templates/login/index.html b/location_app/app/templates/login/index.html index 8ceb405..6c9b780 100644 --- a/location_app/app/templates/login/index.html +++ b/location_app/app/templates/login/index.html @@ -43,14 +43,16 @@

Empty password

{% endif %} - - +
+ + +
diff --git a/location_app/app/templates/main/index.html b/location_app/app/templates/main/index.html index b99edb2..c5afb5d 100644 --- a/location_app/app/templates/main/index.html +++ b/location_app/app/templates/main/index.html @@ -14,21 +14,15 @@ {% block b1 %} -
- -
+Profile {% endblock %} {% block b2 %} -
- -
+Map {% endblock %} {% block b3 %} -
- -
+Average {% endblock %} diff --git a/location_app/app/templates/map/index.html b/location_app/app/templates/map/index.html index f1e2333..79b6b9d 100644 --- a/location_app/app/templates/map/index.html +++ b/location_app/app/templates/map/index.html @@ -8,7 +8,7 @@ - + {% endblock %} @@ -23,25 +23,18 @@ {% block b1 %} -
- -
+Home {% endblock %} {% block b2 %} -
- -
+Profile {% endblock %} {% block b3 %} -
- -
+Average {% endblock %} - {% block body %}
diff --git a/location_app/app/templates/picture/index.html b/location_app/app/templates/picture/index.html new file mode 100644 index 0000000..a2e3ac0 --- /dev/null +++ b/location_app/app/templates/picture/index.html @@ -0,0 +1,18 @@ +{% extends 'base.html' %} + + +{% block title %} Select Profile Picture {% endblock %} + + +{% block basejs %} +{% endblock %} + + +{% block basecss %} +{% endblock %} + + +{% block basebody %} +
+
+{% endblock %} \ No newline at end of file diff --git a/location_app/app/templates/profile/index.html b/location_app/app/templates/profile/index.html index 3c5e203..11a1560 100644 --- a/location_app/app/templates/profile/index.html +++ b/location_app/app/templates/profile/index.html @@ -1,44 +1,126 @@ -{% extends 'base_page.html' %} +{% extends 'base_page.html' %} -{% block title %} Profile {% endblock %} +{% block title %} Profile {% endblock %} -{% block js %} +{% block js %} + + {% endblock %} {% block css %} - + {% endblock %} {% block b1 %} -
- -
+Home {% endblock %} {% block b2 %} -
- -
+Map {% endblock %} {% block b3 %} -
- -
+Average {% endblock %} {% block body %}
- + +
+

My profile

+
+
+ profile +
+
+

ID:

+
+
+

Name:

+
+
+

Birthday:

+
+
+

Favourite color:

+
+
+

Weight:

+
+
+

Favourite city:

+
+
+

Favourite Street:

+
+
+

Total calories burnt:

+
+
+

Top calories:

+
+
+

Top speed:

+
+
+

Your type:

+
+
+

Total distance:

+
+
+

Top distance:

+
+
+

{{user[0][0]}}

+
+
+

{{user[0][1]}}

+
+
+

{{user[0][2]}}

+
+
+

{{user[0][3]}}

+
+
+

+
+
+

{{user[1][0][0]}}

+
+
+

{{user[1][1][0]}}

+
+
+

???

+
+
+

???

+
+
+

???

+
+
+

???

+
+
+

???

+
+
+

???

+
{% endblock %}