From 1851b745936ec5d09ec98ebccbc4dbdb527b4cb2 Mon Sep 17 00:00:00 2001 From: Ivan Gaidai-Turlov Date: Sat, 11 May 2019 21:54:11 +0300 Subject: [PATCH 01/32] added showing users --- app/room_namespace.py | 4 +- app/routes.py | 20 +++-- app/static/js/waiting_room.js | 2 +- app/static/stylesheets/info_block.css | 2 + app/static/stylesheets/light.css | 93 +++++++++++------------ app/templates/_user_block-small.html | 18 +++++ app/templates/_user_block.html | 9 ++- app/templates/profile/_change_status.html | 2 +- app/templates/profile/profile.html | 40 ++++++---- app/templates/rooms/waiting_room.html | 72 ++++++++---------- database/room.py | 11 +-- database/user.py | 1 + 12 files changed, 153 insertions(+), 121 deletions(-) create mode 100644 app/templates/_user_block-small.html diff --git a/app/room_namespace.py b/app/room_namespace.py index aaa4bbc..39916a4 100644 --- a/app/room_namespace.py +++ b/app/room_namespace.py @@ -11,12 +11,12 @@ def on_connect(self): room_id = self.namespace[1:] if db.rooms.get(room_id): db.rooms.add_user(room_id) - emit('update', {'event': 'player_enter_or_leave', 'players': ','.join(db.rooms.get(room_id).users)}, + emit('update', {'event': 'player_enter_or_leave', 'players': ','.join(db.rooms.get(room_id).usernames)}, broadcast = True, namespace = self.namespace) def on_disconnect(self): room_id = self.namespace[1:] if db.rooms.get(room_id): db.rooms.remove_user(room_id) - emit('update', {'event': 'player_enter_or_leave', 'players': ','.join(db.rooms.get(room_id).users)}, + emit('update', {'event': 'player_enter_or_leave', 'players': ','.join(db.rooms.get(room_id).usernames)}, broadcast = True, namespace = self.namespace) diff --git a/app/routes.py b/app/routes.py index 33dcf78..f485fd4 100644 --- a/app/routes.py +++ b/app/routes.py @@ -73,10 +73,20 @@ def logout(): @app.route('/profile') -@login_required -def profile(): +# @login_required +def my_profile(): return simple_render_template('profile/profile.html', form = request.args.get('form'), result = request.args.get('result')) +@app.route('/profile/') +def profile(username): + if username == session.get('username'): + return redirect(url_for('my_profile')) + else: + profile_user = db.users.get_by_name(username) or '' + return simple_render_template('profile/profile.html', form = request.args.get('form'), result = request.args.get('result'), + profile_user=profile_user) + + @app.route('/profile/change_login', methods=['POST', 'GET']) def change_login(): @@ -147,8 +157,8 @@ def add_map(): return simple_render_template('add_map.html') -@app.route('/room_list/', methods=['POST', 'GET']) -def room_list(page): +@app.route('/room_list', methods=['POST', 'GET']) +def room_list(): if request.method == 'POST': room_id = request.form.get('join_button') return redirect(url_for('waiting_room', room_id=room_id)) @@ -220,7 +230,7 @@ def waiting_room(room_id): elif db.rooms.get(room_id) is None: return redirect(url_for('room_list', page=0)) else: - return simple_render_template('rooms/waiting_room.html', room=db.rooms.get(room_id), hide_header=True, maps=db.maps.get_all()) + return simple_render_template('rooms/waiting_room.html', room=db.rooms.get(room_id), maps=db.maps.get_all()) @app.route('/game_room/', methods=['POST', 'GET']) diff --git a/app/static/js/waiting_room.js b/app/static/js/waiting_room.js index 3e40fb6..dbea545 100644 --- a/app/static/js/waiting_room.js +++ b/app/static/js/waiting_room.js @@ -53,7 +53,7 @@ socket.on('update', function(msg) { var player_list = document.getElementById('player_list'); player_list.innerHTML = ''; for (var i = 0; i < msg.players.split(',').length; i++) { - player_list.innerHTML += ('

' + msg.players.split(',')[i] + '

') + player_list.innerHTML += ('

' + msg.players.split(',')[i] + '

') }; break; diff --git a/app/static/stylesheets/info_block.css b/app/static/stylesheets/info_block.css index 8559892..35d2748 100644 --- a/app/static/stylesheets/info_block.css +++ b/app/static/stylesheets/info_block.css @@ -3,8 +3,10 @@ .warning-info-block { margin-top: 10px; margin-bottom: 10px; + padding: 5px; padding-left: 10px; width: calc(100% -10px -2px); + max-width: 300px; } .succes-info-block { diff --git a/app/static/stylesheets/light.css b/app/static/stylesheets/light.css index 3ff5a30..f24ebfb 100644 --- a/app/static/stylesheets/light.css +++ b/app/static/stylesheets/light.css @@ -90,8 +90,6 @@ h1, h2 { } .sidebar-r { - /*display: table;*/ - /*float: right;*/ width: 300px; height: 100%; padding-top: 0; @@ -103,12 +101,19 @@ h1, h2 { padding-top:0; } +.user-block-small { + width: 200px; + border: 1px solid grey; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.22); +} + .user-block > div { display: inline-block; vertical-align: top; } .user-block-info { + vertical-align: center; margin-left: 10px; } @@ -116,10 +121,22 @@ h1, h2 { margin-top: 10px; } +.user-block-small-info-username { + margin-top: 0; +} + +.user-block-small-ava { + border-right: 1px solid grey; +} + .name-large { font-family: 'Roboto Slab', serif; font-size: 20pt; - font-family: +} + +.name-medium { + font-family: 'Roboto Slab', serif; + font-size: 12pt; } .user-ava-large { @@ -129,6 +146,21 @@ h1, h2 { border: 1px solid black; } +.user-ava-medium { + width: 60px; + height: 60px; + vertical-align:bottom; + border: 1px solid black; +} + +.user-ava-small { + width: 40px; + height: 40px; + vertical-align:bottom; + border: 1px solid transparent; + border-radius: 3px; +} + .navbar-sidebar { position: absolute; top: 20%; @@ -189,48 +221,6 @@ h1, h2 { text-align: center; } -.player-list { - width: 33%; - position: absolute; - top: 0%; - left: 0%; - overflow: auto; -} - -.room-info { - width: 33%; - position: absolute; - top: 0%; - left: 33.5%; - color: #000000; - text-align: center; -} - -.room-settings { - display: none; - width: 33%; - position: absolute; - top: 0%; - left: 33.5%; -} - -.room-data-wrapper { - background: rgb(230, 230, 230); - color: rgb(128, 128, 255); - position: absolute; - top: 20%; - height: 50%; - width: 60%; - left: 20%; - font-family: Verdana; -} - -.room-actions { - position: absolute; - left: 67%; - width: 33%; -} - /* Ниже - стили комнаты игры. Их надо будет перенести в новый дизайн целиком */ .game-room-header { @@ -328,7 +318,7 @@ h1, h2 { overflow: auto; } -.player { +.player-block { text-align: center; margin-bottom: 7px; color: #ff7e7e; @@ -340,6 +330,7 @@ h1, h2 { .undone { color: grey; font-style: italic; + font-family: var(--font-text); } .btn { @@ -375,4 +366,12 @@ h1, h2 { #sidebar-content.fixed { position: fixed; top: 30px; -} \ No newline at end of file +} + +.no-margin-top { + margin-top: 0; +} + +.self { + border-color: var(--clr-m1); +} diff --git a/app/templates/_user_block-small.html b/app/templates/_user_block-small.html new file mode 100644 index 0000000..a77c63a --- /dev/null +++ b/app/templates/_user_block-small.html @@ -0,0 +1,18 @@ +{% if not ub__user %} + {% set ub__user = user %} +{% endif %} +
+
+ + + +
+
+
+ {{ ub__user.username }} +
+
+ {{ ub__signature }} +
+
+
\ No newline at end of file diff --git a/app/templates/_user_block.html b/app/templates/_user_block.html index 5e51262..8d6cc51 100644 --- a/app/templates/_user_block.html +++ b/app/templates/_user_block.html @@ -1,12 +1,15 @@ +{% if not ub__user %} + {% set ub__user = user %} +{% endif %}
- {{ username }} + {{ ub__user.username }}
{% if not ub__hide_play_button %} diff --git a/app/templates/profile/_change_status.html b/app/templates/profile/_change_status.html index c3b6188..d8a678a 100644 --- a/app/templates/profile/_change_status.html +++ b/app/templates/profile/_change_status.html @@ -1,4 +1,4 @@ -
+ Статус: diff --git a/app/templates/profile/profile.html b/app/templates/profile/profile.html index 71c0ebb..d7a7d7d 100644 --- a/app/templates/profile/profile.html +++ b/app/templates/profile/profile.html @@ -4,20 +4,30 @@ {% set show_sidebar_r = true %} {% block content %}
-
-

Профиль:

- {% include 'profile/_change_login.html' %} - {% include 'profile/_change_status.html' %} - {% include 'profile/_change_password.html' %} -
-
-

Аватар:

- {% include 'profile/_change_avatar.html' %} -
-
-

Безопасность:

- {% include 'profile/_change_email.html' %} - {% include 'profile/_change_phone.html' %} -
+ {% if profile_user == '' %} +
+ Этот пользователь не существует +
+ {% elif profile_user %} + {% set ub__user = profile_user %} + {% set ub__hide_play_button = true %} + {% include '_user_block.html' %} + {% else %} +
+

Профиль:

+ {% include 'profile/_change_login.html' %} + {% include 'profile/_change_status.html' %} + {% include 'profile/_change_password.html' %} +
+
+

Аватар:

+ {% include 'profile/_change_avatar.html' %} +
+
+

Безопасность:

+ {% include 'profile/_change_email.html' %} + {% include 'profile/_change_phone.html' %} +
+ {% endif %}
{% endblock %} diff --git a/app/templates/rooms/waiting_room.html b/app/templates/rooms/waiting_room.html index b898c47..77608f2 100644 --- a/app/templates/rooms/waiting_room.html +++ b/app/templates/rooms/waiting_room.html @@ -1,51 +1,39 @@ {% extends "base.html" %} {% set title = room.name %} + {% block content %}
-
{{ room.name }}
-
-
- {% for player in room.users %} -

- {{ player }} -

- {% endfor %} -
-
-

Создана {{ room.date }} пользователем {{ room.creator }}

-

- {% if room.description != None %} - Описание: {% autoescape false %}{{ room.description.split('\n') | join('
')}}{% endautoescape %} - {% endif %} -

-

- Карта: карта не выбрана. -

-

- Описание карты: карта не выбрана. -

-
-
- Имя комнаты:
- Описание:
- Карта: -
- -
- +
+ {{ room.name }} +
+
+ {% for user in room.users %} +
+ {% set ub__user = user %} + {% set ub__signature = 'Создатель' if user.username == room.creator else 'Игрок' %} + {% include "_user_block-small.html" %} + {% endfor %} +
+
+
+
+{% endblock %} + +{% set show_sidebar_r = true %} +{% set ub__hide_play_button = true %} +{% block sidebar_content %} + + {% if username == room.creator %} + + {% endif %} + + + {% if username == room.creator %} + + {% endif %} + {% endblock %} \ No newline at end of file diff --git a/database/room.py b/database/room.py index e13db0d..20c02f2 100644 --- a/database/room.py +++ b/database/room.py @@ -4,12 +4,13 @@ class Room: - def __init__(self, ID, name, creator, description, users, date, map_id): + def __init__(self, ID, name, creator, description, users, date, map_id, db): self.id = ID self.name = name self.description = description self.creator = creator - self.users = users_from_string(users) + self.usernames = usernames_from_string(users) + self.users = list(map(db.users.get_by_name, self.usernames)) self.date = date self.map_id = map_id @@ -17,7 +18,7 @@ def __init__(self, ID, name, creator, description, users, date, map_id): def __str__(self): return 'id: {}; name: {}; date: {}'.format(self.id, self.name, self.date) -def users_from_string(users_string): +def usernames_from_string(users_string): return json.loads(users_string) def users_to_string(users): @@ -51,7 +52,7 @@ def get(self, ID): if room is None: return None - return Room(*room) + return Room(*room, self.db) def delete(self, ID): if self.get(ID) is None: @@ -90,7 +91,7 @@ def add_user(self, ID, username = None): return DBAnswer(False, DBError.IncorrectUser, 'Can\'t add nonexistent user into room') - users = self.get(ID).users + users = self.get(ID).usernames if username in users: return DBAnswer(False, DBError.IncorrectUser, 'This user already in this room') diff --git a/database/user.py b/database/user.py index cdd5b68..b8e90d9 100644 --- a/database/user.py +++ b/database/user.py @@ -11,6 +11,7 @@ def __init__(self, ID, username, password_hash, avatar): self.username = username self.password_hash = password_hash self.avatar = avatar + self.avatar_path = '/static/images/avatars/' + avatar def __str__(self): return 'id: {}; username: {}; password_hash: {};'.format( From d0b0a3789b87fb639819dfd127bb94db1f98c494 Mon Sep 17 00:00:00 2001 From: Ivan Gaidai-Turlov Date: Sat, 11 May 2019 22:11:17 +0300 Subject: [PATCH 02/32] added background for self --- app/static/stylesheets/light.css | 1 + app/static/stylesheets/vars.css | 1 + 2 files changed, 2 insertions(+) diff --git a/app/static/stylesheets/light.css b/app/static/stylesheets/light.css index f24ebfb..8f0102a 100644 --- a/app/static/stylesheets/light.css +++ b/app/static/stylesheets/light.css @@ -374,4 +374,5 @@ h1, h2 { .self { border-color: var(--clr-m1); + background: var(--clr-m1-l) } diff --git a/app/static/stylesheets/vars.css b/app/static/stylesheets/vars.css index 41e7a8e..5adba7c 100644 --- a/app/static/stylesheets/vars.css +++ b/app/static/stylesheets/vars.css @@ -5,6 +5,7 @@ /*--clr-m1: #3bb34a;*/ /*purple*/ --clr-m1: #ae0fff; + --clr-m1-l: #f1dafd; /*orange*/ /*--clr-m1: #e65124;*/ /*greyblue*/ From 9921708e1f0a1c8d99a6d6c97336ede502621d45 Mon Sep 17 00:00:00 2001 From: Ivan Gaidai-Turlov Date: Sat, 11 May 2019 22:42:27 +0300 Subject: [PATCH 03/32] added colors --- app/static/stylesheets/info_block.css | 1 - app/static/stylesheets/vars.css | 3 +++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/static/stylesheets/info_block.css b/app/static/stylesheets/info_block.css index 35d2748..6d5ac4e 100644 --- a/app/static/stylesheets/info_block.css +++ b/app/static/stylesheets/info_block.css @@ -3,7 +3,6 @@ .warning-info-block { margin-top: 10px; margin-bottom: 10px; - padding: 5px; padding-left: 10px; width: calc(100% -10px -2px); max-width: 300px; diff --git a/app/static/stylesheets/vars.css b/app/static/stylesheets/vars.css index 5adba7c..171acd1 100644 --- a/app/static/stylesheets/vars.css +++ b/app/static/stylesheets/vars.css @@ -3,13 +3,16 @@ :root { /* green*/ /*--clr-m1: #3bb34a;*/ + /*--clr-m1-l: #d8f5db;*/ /*purple*/ --clr-m1: #ae0fff; --clr-m1-l: #f1dafd; /*orange*/ /*--clr-m1: #e65124;*/ + /*--clr-m1-l: #f3d0c6;*/ /*greyblue*/ /*--clr-m1: #4a94ab;*/ + /*--clr-m1-l: #d8e6ea;*/ /*yellow*/ --clr-c1: #ffdc4b; From 225003add9ca5ed376a1439cea760a46f5539552 Mon Sep 17 00:00:00 2001 From: Ivan Gaidai-Turlov Date: Sun, 12 May 2019 12:15:50 +0300 Subject: [PATCH 04/32] fixed script --- app/room_namespace.py | 4 ++-- app/routes.py | 14 +++++++++----- app/static/js/waiting_room.js | 20 +++++++++----------- app/templates/base.html | 1 + app/templates/rooms/_player_list.html | 6 ++++++ app/templates/rooms/waiting_room.html | 18 ++++++++---------- database/room.py | 14 +++++++------- 7 files changed, 42 insertions(+), 35 deletions(-) create mode 100644 app/templates/rooms/_player_list.html diff --git a/app/room_namespace.py b/app/room_namespace.py index 39916a4..f4427af 100644 --- a/app/room_namespace.py +++ b/app/room_namespace.py @@ -11,12 +11,12 @@ def on_connect(self): room_id = self.namespace[1:] if db.rooms.get(room_id): db.rooms.add_user(room_id) - emit('update', {'event': 'player_enter_or_leave', 'players': ','.join(db.rooms.get(room_id).usernames)}, + emit('update', {'event': 'player_enter_or_leave'}, broadcast = True, namespace = self.namespace) def on_disconnect(self): room_id = self.namespace[1:] if db.rooms.get(room_id): db.rooms.remove_user(room_id) - emit('update', {'event': 'player_enter_or_leave', 'players': ','.join(db.rooms.get(room_id).usernames)}, + emit('update', {'event': 'player_enter_or_leave'}, broadcast = True, namespace = self.namespace) diff --git a/app/routes.py b/app/routes.py index f485fd4..4cf0ddf 100644 --- a/app/routes.py +++ b/app/routes.py @@ -187,7 +187,7 @@ def genereate_room_id(size): @app.route('/waiting_room/', methods=['POST', 'GET']) -@login_required +# @login_required def waiting_room(room_id): if request.method == 'POST': event_type = request.headers.get('Event-Type') @@ -213,16 +213,20 @@ def waiting_room(room_id): elif event_type == 'start_game': imagepath='/static/images/button_images/' map_id = db.rooms.get(room_id).map_id - labyrinth = load_map(db.maps.get(map_id).map, db.rooms.get(room_id).users, imagepath=imagepath) - db.lrm.add_labyrinth(room_id, labyrinth) - emit('update', {'event': 'start_game'}, - broadcast=True, namespace='/'+room_id) + if db.maps.get(map_id).map: + labyrinth = load_map(db.maps.get(map_id).map, db.rooms.get(room_id).users, imagepath=imagepath) + db.lrm.add_labyrinth(room_id, labyrinth) + emit('update', {'event': 'start_game'}, + broadcast=True, namespace='/'+room_id) elif event_type == 'delete_room': emit('update', {'event': 'delete_room'}, broadcast=True, namespace='/'+room_id) db.rooms.delete(room_id) + elif event_type == 'get_players_list': + return simple_render_template('rooms/_player_list.html', room=db.rooms.get(room_id)) + username = session.get('username') labyrinth = db.lrm.get_labyrinth(room_id) if labyrinth is not None and username in [user.get_username() for user in labyrinth.players_list]: diff --git a/app/static/js/waiting_room.js b/app/static/js/waiting_room.js index dbea545..065ab53 100644 --- a/app/static/js/waiting_room.js +++ b/app/static/js/waiting_room.js @@ -23,17 +23,14 @@ function saveSettings() { function deleteRoom() { var xhr = xhrOpen('delete_room'); - xhr.send(); }; function startGame() { var xhr = xhrOpen('start_game'); - xhr.send(); }; -console.log('http://' + document.domain + ':' + location.port + '/' + document.getElementById('data').dataset.room_id); var socket = io.connect('http://' + document.domain + ':' + location.port + '/' + document.getElementById('data').dataset.room_id); socket.on('update', function(msg) { switch (msg.event) { @@ -45,15 +42,16 @@ socket.on('update', function(msg) { title.innerHTML = (msg.name); description.innerHTML = ('Описание:
' + msg.description.replace(/\n/g, '
')); - mapName.innerHTML = ('Карта:' + msg.map.name) - mapDescription.innerHTML = ('Описание карты:
' + msg.map.description.replace(/\n/g, '
') ) + mapName.innerHTML = ('Карта:' + msg.map.name); + mapDescription.innerHTML = ('Описание карты:
' + msg.map.description.replace(/\n/g, '
')); break; case 'player_enter_or_leave': - var player_list = document.getElementById('player_list'); - player_list.innerHTML = ''; - for (var i = 0; i < msg.players.split(',').length; i++) { - player_list.innerHTML += ('

' + msg.players.split(',')[i] + '

') + var players_list = document.getElementById('players_list'); + var xhr = xhrOpen('get_players_list'); + xhr.send() + xhr.onload = function () { + players_list.innerHTML = xhr.responseText }; break; @@ -80,8 +78,8 @@ socket.on('update', function(msg) { // var changeDescriptionInput = document.getElementById('room_description'); // changeDescriptionInput.onkeydown = changeDescription; -var saveSettingsButton = document.getElementById('save_settings_btn'); -saveSettingsButton.onclick = saveSettings; +// var saveSettingsButton = document.getElementById('save_settings_btn'); +// saveSettingsButton.onclick = saveSettings; var startButton = document.getElementById('start_button'); if (startButton) { diff --git a/app/templates/base.html b/app/templates/base.html index a81b6a7..0381eed 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -44,4 +44,5 @@ {% endif %} + {% block scripts %}{% endblock %} {% endblock %} diff --git a/app/templates/rooms/_player_list.html b/app/templates/rooms/_player_list.html new file mode 100644 index 0000000..012957d --- /dev/null +++ b/app/templates/rooms/_player_list.html @@ -0,0 +1,6 @@ +{% for user in room.users %} +
+ {% set ub__user = user %} + {% set ub__signature = 'Создатель' if user.username == room.creator else 'Игрок' %} + {% include "_user_block-small.html" %} +{% endfor %} \ No newline at end of file diff --git a/app/templates/rooms/waiting_room.html b/app/templates/rooms/waiting_room.html index 77608f2..c7d18ca 100644 --- a/app/templates/rooms/waiting_room.html +++ b/app/templates/rooms/waiting_room.html @@ -8,19 +8,13 @@
{{ room.name }}
-
- {% for user in room.users %} -
- {% set ub__user = user %} - {% set ub__signature = 'Создатель' if user.username == room.creator else 'Игрок' %} - {% include "_user_block-small.html" %} - {% endfor %} +
+ {% include "rooms/_player_list.html" %}
- {% endblock %} {% set show_sidebar_r = true %} @@ -28,12 +22,16 @@ {% block sidebar_content %}
{% if username == room.creator %} - + {% endif %} {% if username == room.creator %} - + {% endif %}
+{% endblock %} + +{% block scripts %} + {% endblock %} \ No newline at end of file diff --git a/database/room.py b/database/room.py index 20c02f2..490c882 100644 --- a/database/room.py +++ b/database/room.py @@ -21,7 +21,7 @@ def __str__(self): def usernames_from_string(users_string): return json.loads(users_string) -def users_to_string(users): +def usernames_to_string(users): return json.dumps(users) @@ -97,7 +97,7 @@ def add_user(self, ID, username = None): return DBAnswer(False, DBError.IncorrectUser, 'This user already in this room') users.append(username) - users_string = users_to_string(users) + users_string = usernames_to_string(users) self.cursor.execute('UPDATE rooms SET users=? WHERE id=?', [users_string, ID]) self.connect.commit() @@ -111,14 +111,14 @@ def remove_user(self, ID, username = None): return DBAnswer(False, DBError.RoomNotExist, 'Can\'t remove user from nonexistent room') - users = self.get(ID).users + usernames = self.get(ID).usernames - if username not in users: + if username not in usernames: return DBAnswer(False, DBError.IncorrectUser, 'This user not in this room') - users.remove(username) - users_string = users_to_string(users) - self.cursor.execute('UPDATE rooms SET users=? WHERE id=?', [users_string, ID]) + usernames.remove(username) + usernames_string = usernames_to_string(usernames) + self.cursor.execute('UPDATE rooms SET users=? WHERE id=?', [usernames_string, ID]) self.connect.commit() return DBAnswer(True, OK, 'User successfully removed') From 70e7366ff10744b1ba5d35c2f3a2e448c650f429 Mon Sep 17 00:00:00 2001 From: Ivan Gaidai-Turlov Date: Sun, 12 May 2019 17:24:54 +0300 Subject: [PATCH 05/32] added "login_required" decorator to some routes --- app/routes.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/app/routes.py b/app/routes.py index 4cf0ddf..5491ea1 100644 --- a/app/routes.py +++ b/app/routes.py @@ -19,7 +19,8 @@ def login_required(f): @wraps(f) def wrapped(*args, **kwargs): - if session.get('username') is None: + print(request.method) + if session.get('username') is None and request.method == 'GET': return redirect(url_for('index')) else: return f(*args, **kwargs) @@ -73,7 +74,7 @@ def logout(): @app.route('/profile') -# @login_required +@login_required def my_profile(): return simple_render_template('profile/profile.html', form = request.args.get('form'), result = request.args.get('result')) @@ -89,6 +90,7 @@ def profile(username): @app.route('/profile/change_login', methods=['POST', 'GET']) +@login_required def change_login(): if request.method == 'POST': new_login = request.form.get("new_login") @@ -101,6 +103,7 @@ def change_login(): @app.route('/profile/change_password', methods=['POST', 'GET']) +@login_required def change_password(): if request.method == 'POST': username = session['username'] @@ -117,6 +120,7 @@ def change_password(): @app.route('/profile/change_avatar', methods=['POST', 'GET']) +@login_required def change_avatar(): if request.method == 'POST': username = session['username'] @@ -158,6 +162,7 @@ def add_map(): @app.route('/room_list', methods=['POST', 'GET']) +@login_required def room_list(): if request.method == 'POST': room_id = request.form.get('join_button') @@ -166,7 +171,7 @@ def room_list(): rooms = db.rooms.get_all() return simple_render_template('rooms/room_list.html', rooms = rooms) - +# @app.route('/rules') def rules(): @@ -187,7 +192,7 @@ def genereate_room_id(size): @app.route('/waiting_room/', methods=['POST', 'GET']) -# @login_required +@login_required def waiting_room(room_id): if request.method == 'POST': event_type = request.headers.get('Event-Type') @@ -238,6 +243,7 @@ def waiting_room(room_id): @app.route('/game_room/', methods=['POST', 'GET']) +@login_required def game_room(room_id): username = session.get('username') labyrinth = db.lrm.get_labyrinth(room_id) From a7c112c37aabbe8b83ef0ca142ca6b1562afc28d Mon Sep 17 00:00:00 2001 From: Ivan Gaidai-Turlov Date: Sun, 12 May 2019 23:21:00 +0300 Subject: [PATCH 06/32] deleted trash --- app/routes.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/routes.py b/app/routes.py index 5491ea1..3427761 100644 --- a/app/routes.py +++ b/app/routes.py @@ -7,6 +7,7 @@ import random import string import json +import time @@ -19,7 +20,6 @@ def login_required(f): @wraps(f) def wrapped(*args, **kwargs): - print(request.method) if session.get('username') is None and request.method == 'GET': return redirect(url_for('index')) else: @@ -171,7 +171,7 @@ def room_list(): rooms = db.rooms.get_all() return simple_render_template('rooms/room_list.html', rooms = rooms) -# + @app.route('/rules') def rules(): From 4f676aa7c8d5ae6d895a883b30a366f794ac1220 Mon Sep 17 00:00:00 2001 From: Ivan Gaidai-Turlov Date: Wed, 15 May 2019 19:22:51 +0300 Subject: [PATCH 07/32] into project introduced jquerry fixed some points --- app/help_functions.py | 30 +++++++ app/room_namespace.py | 10 ++- app/routes.py | 52 ++++-------- app/static/js/waiting_room.js | 102 ----------------------- app/templates/_user_block-small.html | 4 +- app/templates/head.html | 5 +- app/templates/rooms/waiting_room.html | 112 ++++++++++++++++++++++---- labyrinth_engine/labyrinth.py | 2 +- 8 files changed, 155 insertions(+), 162 deletions(-) create mode 100644 app/help_functions.py delete mode 100644 app/static/js/waiting_room.js diff --git a/app/help_functions.py b/app/help_functions.py new file mode 100644 index 0000000..dbc4dab --- /dev/null +++ b/app/help_functions.py @@ -0,0 +1,30 @@ +from flask import request, render_template, session +from functools import wraps +from app import db + +def login_required(f): + @wraps(f) + def wrapped(*args, **kwargs): + if session.get('username') is None and request.method == 'GET': + return redirect(url_for('index')) + else: + return f(*args, **kwargs) + + return wrapped + + +def simple_render_template(url, **kwargs): + username = session.get('username') + ava_prefix = '/static/images/avatars/' + if username is not None: + user = db.users.get_by_name(username) + user_ava = ava_prefix + db.users.get_avatar(username) + else: + user = None + user_ava = None + return render_template(url, username=username, user_ava=user_ava, user=user, args=request.args, **kwargs) + +def redirect_with_args(url = None, **kwargs): + if url is None: + url = request.referrer.split('?')[0] + return redirect(url+'?'+ '&'.join([str(k)+'='+str(v) for k, v in kwargs.items()])) \ No newline at end of file diff --git a/app/room_namespace.py b/app/room_namespace.py index f4427af..91958dc 100644 --- a/app/room_namespace.py +++ b/app/room_namespace.py @@ -1,5 +1,7 @@ from flask_socketio import Namespace, emit from app import db, socketio +from app.help_functions import simple_render_template +from flask import session def init_room_namespaces(): for room in db.rooms.page_by_page(1): @@ -11,12 +13,14 @@ def on_connect(self): room_id = self.namespace[1:] if db.rooms.get(room_id): db.rooms.add_user(room_id) - emit('update', {'event': 'player_enter_or_leave'}, + emit('update', {'event': 'player_enter_or_leave', 'data': + simple_render_template('rooms/_player_list.html', room=db.rooms.get(room_id))}, broadcast = True, namespace = self.namespace) - def on_disconnect(self): + def on_disconnect_request(self): room_id = self.namespace[1:] if db.rooms.get(room_id): db.rooms.remove_user(room_id) - emit('update', {'event': 'player_enter_or_leave'}, + emit('update', {'event': 'player_enter_or_leave', 'data': + simple_render_template('rooms/_player_list.html', room=db.rooms.get(room_id))}, broadcast = True, namespace = self.namespace) diff --git a/app/routes.py b/app/routes.py index 3427761..8a34009 100644 --- a/app/routes.py +++ b/app/routes.py @@ -3,48 +3,16 @@ from labyrinth_engine import load_map from app import app, db, socketio from flask_socketio import emit -from functools import wraps +from app.help_functions import * import random import string import json import time +import os - -''' -help functions -''' - -def login_required(f): - @wraps(f) - def wrapped(*args, **kwargs): - if session.get('username') is None and request.method == 'GET': - return redirect(url_for('index')) - else: - return f(*args, **kwargs) - - return wrapped - - -def simple_render_template(url, **kwargs): - username = session.get('username') - ava_prefix = '/static/images/avatars/' - if username is not None: - user = db.users.get_by_name(username) - user_ava = ava_prefix + db.users.get_avatar(username) - else: - user = None - user_ava = None - return render_template(url, username=username, user_ava=user_ava, user=user, args=request.args, **kwargs) - -def redirect_with_args(url = None, **kwargs): - if url is None: - url = request.referrer.split('?')[0] - return redirect(url+'?'+ '&'.join([str(k)+'='+str(v) for k, v in kwargs.items()])) - - @app.route('/') @app.route('/index') def index(): @@ -217,9 +185,10 @@ def waiting_room(room_id): elif event_type == 'start_game': imagepath='/static/images/button_images/' - map_id = db.rooms.get(room_id).map_id + # map_id = db.rooms.get(room_id).map_id + map_id = 1 if db.maps.get(map_id).map: - labyrinth = load_map(db.maps.get(map_id).map, db.rooms.get(room_id).users, imagepath=imagepath) + labyrinth = load_map(db.maps.get(map_id).map, db.rooms.get(room_id).usernames, imagepath=imagepath) db.lrm.add_labyrinth(room_id, labyrinth) emit('update', {'event': 'start_game'}, broadcast=True, namespace='/'+room_id) @@ -278,3 +247,14 @@ def game_room(room_id): return redirect(url_for('waiting_room', room_id=room_id)) else: return simple_render_template('rooms/game_room.html', room=db.rooms.get(room_id)) + + +@app.route('/templates/') +def get_template(template_name): + try: + f = open('app/templates/' + template_name, 'r') + data = f.read() + f.close() + return data + except: + return '' diff --git a/app/static/js/waiting_room.js b/app/static/js/waiting_room.js deleted file mode 100644 index 065ab53..0000000 --- a/app/static/js/waiting_room.js +++ /dev/null @@ -1,102 +0,0 @@ -function xhrOpen(eventType) { - var xhr = new XMLHttpRequest(); - - xhr.open('POST', document.getElementById('data').dataset.post); - xhr.setRequestHeader('Event-Type', eventType); - xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); - - return xhr; -}; - -//settings -function saveSettings() { - var xhr = xhrOpen('change_settings'); - - var description = document.getElementById('room_description').value; - var name = document.getElementById('room_name').value; - var mapId = document.getElementById('room_map').value; - - console.log(description, name, mapId); - - xhr.send('description='+description+'&name='+name+'&map_id='+mapId) -} - -function deleteRoom() { - var xhr = xhrOpen('delete_room'); - xhr.send(); -}; - -function startGame() { - var xhr = xhrOpen('start_game'); - xhr.send(); -}; - -var socket = io.connect('http://' + document.domain + ':' + location.port + '/' + document.getElementById('data').dataset.room_id); -socket.on('update', function(msg) { - switch (msg.event) { - case 'change_settings': - var title = document.getElementById('title'); - var description = document.getElementById('description'); - var mapName = document.getElementById('map_name'); - var mapDescription = document.getElementById('map_description'); - - title.innerHTML = (msg.name); - description.innerHTML = ('Описание:
' + msg.description.replace(/\n/g, '
')); - mapName.innerHTML = ('Карта:' + msg.map.name); - mapDescription.innerHTML = ('Описание карты:
' + msg.map.description.replace(/\n/g, '
')); - break; - - case 'player_enter_or_leave': - var players_list = document.getElementById('players_list'); - var xhr = xhrOpen('get_players_list'); - xhr.send() - xhr.onload = function () { - players_list.innerHTML = xhr.responseText - }; - break; - - case 'change_description': - var description = document.getElementById('description'); - - description.innerHTML = ('Description:
' + msg.description.replace(/\n/g, '
')); - break; - - case 'delete_room': - alert('Oups. Room was deleted'); - document.location.href = document.getElementById('data').dataset.delRedirect; - break; - - case 'start_game': - document.location.href = document.getElementById('data').dataset.startRedirect; - break; - }; -}); - -// var changeNameInput = document.getElementById('room_name'); -// changeNameInput.onkeydown = changeName; - -// var changeDescriptionInput = document.getElementById('room_description'); -// changeDescriptionInput.onkeydown = changeDescription; - -// var saveSettingsButton = document.getElementById('save_settings_btn'); -// saveSettingsButton.onclick = saveSettings; - -var startButton = document.getElementById('start_button'); -if (startButton) { - startButton.onclick = startGame; -} - -var deleteRoomButton = document.getElementById('delete_room_button'); -if (deleteRoomButton) { - deleteRoomButton.onclick = deleteRoom; -} - -var settingButton = document.getElementById('settings_button'); -var roomInfo = document.getElementById('room_info'); -var roomSettings = document.getElementById('room_settings'); -if (settingButton) { - settingButton.onclick = function() { - toggle(roomInfo); - toggle(roomSettings); - }; -} \ No newline at end of file diff --git a/app/templates/_user_block-small.html b/app/templates/_user_block-small.html index a77c63a..f338f8e 100644 --- a/app/templates/_user_block-small.html +++ b/app/templates/_user_block-small.html @@ -1,8 +1,8 @@ {% if not ub__user %} {% set ub__user = user %} {% endif %} -
-
+
+
diff --git a/app/templates/head.html b/app/templates/head.html index b32c4c6..4a2c9a3 100644 --- a/app/templates/head.html +++ b/app/templates/head.html @@ -5,8 +5,9 @@ {{ title or 'Лабиринт' }} - - + + + diff --git a/app/templates/rooms/waiting_room.html b/app/templates/rooms/waiting_room.html index c7d18ca..f092f2f 100644 --- a/app/templates/rooms/waiting_room.html +++ b/app/templates/rooms/waiting_room.html @@ -3,13 +3,10 @@ {% set title = room.name %} {% block content %} -
-
- {{ room.name }} + {{ room.name }}
-
- {% include "rooms/_player_list.html" %} +
@@ -20,18 +17,101 @@ {% set show_sidebar_r = true %} {% set ub__hide_play_button = true %} {% block sidebar_content %} -
- {% if username == room.creator %} - - {% endif %} - - - {% if username == room.creator %} - - {% endif %} -
+ {% if username == room.creator %} + + {% endif %} + + + {# {% if username == room.creator %} + + {% endif %} #} {% endblock %} {% block scripts %} - + {% endblock %} \ No newline at end of file diff --git a/labyrinth_engine/labyrinth.py b/labyrinth_engine/labyrinth.py index abcab37..2354eb6 100644 --- a/labyrinth_engine/labyrinth.py +++ b/labyrinth_engine/labyrinth.py @@ -60,7 +60,7 @@ def __init__(self, locations, items, creatures, players, adjacence_list, setting def __str__(self): - return ''.format(self.filename) + return ''.format(self.players_list) # Сообщения. def send_msg(self, msg, player, priority=0): From e734e4e79beae91779394ad010038ca5625e88e2 Mon Sep 17 00:00:00 2001 From: Ivan Gaidai-Turlov Date: Wed, 15 May 2019 20:22:21 +0300 Subject: [PATCH 08/32] added new styles. all block is button. --- app/help_functions.py | 2 +- app/static/stylesheets/light.css | 34 +---------------------- app/static/stylesheets/room_block.css | 5 +++- app/static/stylesheets/user_block.css | 39 +++++++++++++++++++++++++++ app/templates/_user_block-small.html | 6 ++--- app/templates/rooms/room_list.html | 2 +- 6 files changed, 49 insertions(+), 39 deletions(-) create mode 100644 app/static/stylesheets/user_block.css diff --git a/app/help_functions.py b/app/help_functions.py index dbc4dab..13e8736 100644 --- a/app/help_functions.py +++ b/app/help_functions.py @@ -1,4 +1,4 @@ -from flask import request, render_template, session +from flask import request, render_template, session, redirect from functools import wraps from app import db diff --git a/app/static/stylesheets/light.css b/app/static/stylesheets/light.css index 8f0102a..810ebb6 100644 --- a/app/static/stylesheets/light.css +++ b/app/static/stylesheets/light.css @@ -4,6 +4,7 @@ @import url('vars.css'); @import url('svg.css'); @import url('room_block.css'); +@import url('user_block.css'); html, body{ background: rgb(249, 249, 249); @@ -96,39 +97,6 @@ h1, h2 { border-top-width: 0; } - -.user-block { - padding-top:0; -} - -.user-block-small { - width: 200px; - border: 1px solid grey; - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.22); -} - -.user-block > div { - display: inline-block; - vertical-align: top; -} - -.user-block-info { - vertical-align: center; - margin-left: 10px; -} - -.user-block-info-username { - margin-top: 10px; -} - -.user-block-small-info-username { - margin-top: 0; -} - -.user-block-small-ava { - border-right: 1px solid grey; -} - .name-large { font-family: 'Roboto Slab', serif; font-size: 20pt; diff --git a/app/static/stylesheets/room_block.css b/app/static/stylesheets/room_block.css index 6393bbd..c8b1434 100644 --- a/app/static/stylesheets/room_block.css +++ b/app/static/stylesheets/room_block.css @@ -8,7 +8,10 @@ margin-bottom: 20px; overflow: hidden; height: 60px; - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.22); +} + +.room-block:hover { + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.22); } .room-block-info { diff --git a/app/static/stylesheets/user_block.css b/app/static/stylesheets/user_block.css new file mode 100644 index 0000000..ff84f6f --- /dev/null +++ b/app/static/stylesheets/user_block.css @@ -0,0 +1,39 @@ +.user-block { + padding-top:0; +} + +.user-block-small { + width: 200px; + border: 1px solid grey; + border-left-width: 0; + cursor: pointer; +} + +.user-block-small:hover { + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.22); +} + +.user-block > div { + display: inline-block; + vertical-align: top; +} + +.user-block-info { + vertical-align: center; + margin-left: 10px; + /*background: var(--clr-m1-l)*/ +} + +.user-block-info-username { + margin-top: 10px; +} + +.user-block-small-info-username { + margin-top: 0; + color: var(--clr-m1); +} + +.user-block-small-ava { + border-left: 4px solid var(--clr-m1); + padding-left: 1px; +} diff --git a/app/templates/_user_block-small.html b/app/templates/_user_block-small.html index f338f8e..6b00bf0 100644 --- a/app/templates/_user_block-small.html +++ b/app/templates/_user_block-small.html @@ -1,11 +1,11 @@ {% if not ub__user %} {% set ub__user = user %} {% endif %} -
+
- + {# #} - + {# #}
diff --git a/app/templates/rooms/room_list.html b/app/templates/rooms/room_list.html index dc3b2b8..9174963 100644 --- a/app/templates/rooms/room_list.html +++ b/app/templates/rooms/room_list.html @@ -6,7 +6,7 @@

Список комнат

{% for room in rooms %} -
+
{{ room.name }}
From ed20f623cb190c132f662f3c9bdd315e8d570aab Mon Sep 17 00:00:00 2001 From: Ivan Gaidai-Turlov Date: Wed, 15 May 2019 20:30:03 +0300 Subject: [PATCH 09/32] fixed cursor --- app/static/stylesheets/room_block.css | 1 + 1 file changed, 1 insertion(+) diff --git a/app/static/stylesheets/room_block.css b/app/static/stylesheets/room_block.css index c8b1434..526f49b 100644 --- a/app/static/stylesheets/room_block.css +++ b/app/static/stylesheets/room_block.css @@ -8,6 +8,7 @@ margin-bottom: 20px; overflow: hidden; height: 60px; + cursor: pointer; } .room-block:hover { From 70a0fe5f7b07c3ac9095322c40eae46cf6425df7 Mon Sep 17 00:00:00 2001 From: Ivan Gaidai-Turlov <43723504+gtivansan@users.noreply.github.com> Date: Thu, 16 May 2019 15:58:16 +0300 Subject: [PATCH 10/32] added some wroom styles --- app/static/stylesheets/light.css | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/app/static/stylesheets/light.css b/app/static/stylesheets/light.css index 810ebb6..15f8a1e 100644 --- a/app/static/stylesheets/light.css +++ b/app/static/stylesheets/light.css @@ -344,3 +344,28 @@ h1, h2 { border-color: var(--clr-m1); background: var(--clr-m1-l) } + +.inline-flex-container { + display: -webkit-inline-flex; + display: inline-flex; + width: 100%; +} + +.inline-flex-container.space-between { + justify-conten: space-between; + -webkit-justify-content: space-between; +} + +.wroom-clmn-fixed { + width: 200px; + border: 1px solid grey; + margin: 0; +} + +.wroom-clmn { + margin-left: 20px; + margin-right: 20px; + /*width: auto;*/ + flex-grow: 1; + align-content: stretch; +} From 7c0fd9852db1645d7b8aae0bb8dd4415794bc212 Mon Sep 17 00:00:00 2001 From: Ivan Gaidai-Turlov <43723504+gtivansan@users.noreply.github.com> Date: Thu, 16 May 2019 15:58:43 +0300 Subject: [PATCH 11/32] Update waiting_room.html --- app/templates/rooms/waiting_room.html | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/app/templates/rooms/waiting_room.html b/app/templates/rooms/waiting_room.html index f092f2f..a1f7b81 100644 --- a/app/templates/rooms/waiting_room.html +++ b/app/templates/rooms/waiting_room.html @@ -6,11 +6,17 @@
{{ room.name }}
-
-
-
-
-
+
+
+
+
+ Чат +
+
+
+
+ Описание карты +
{% endblock %} @@ -29,7 +35,7 @@ {% block scripts %} -{% endblock %} \ No newline at end of file +{% endblock %} From d2dee4c461bee262c12a39bb4c9b78d7d95b7405 Mon Sep 17 00:00:00 2001 From: Ivan Gaidai-Turlov <43723504+gtivansan@users.noreply.github.com> Date: Thu, 16 May 2019 15:59:57 +0300 Subject: [PATCH 12/32] Update user_block.css --- app/static/stylesheets/user_block.css | 1 + 1 file changed, 1 insertion(+) diff --git a/app/static/stylesheets/user_block.css b/app/static/stylesheets/user_block.css index ff84f6f..853b032 100644 --- a/app/static/stylesheets/user_block.css +++ b/app/static/stylesheets/user_block.css @@ -11,6 +11,7 @@ .user-block-small:hover { box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.22); + border-color: #828282; } .user-block > div { From 68380e7f0beb1c7a1d2e4799e2d7de4501ee7577 Mon Sep 17 00:00:00 2001 From: Ivan Gaidai-Turlov Date: Sat, 18 May 2019 20:15:43 +0300 Subject: [PATCH 13/32] added chat-msg styles prototype --- app/static/stylesheets/light.css | 23 +++++------ app/static/stylesheets/vars.css | 10 ++--- app/static/stylesheets/wroom.css | 44 ++++++++++++++++++++++ app/templates/_login_block.html | 2 +- app/templates/base.html | 26 ++++++------- app/templates/login_register/register.html | 11 ++++++ app/templates/rooms/waiting_room.html | 41 +++++++++++++------- 7 files changed, 111 insertions(+), 46 deletions(-) create mode 100644 app/static/stylesheets/wroom.css diff --git a/app/static/stylesheets/light.css b/app/static/stylesheets/light.css index 15f8a1e..6ce2e3d 100644 --- a/app/static/stylesheets/light.css +++ b/app/static/stylesheets/light.css @@ -5,6 +5,7 @@ @import url('svg.css'); @import url('room_block.css'); @import url('user_block.css'); +@import url('wroom.css'); html, body{ background: rgb(249, 249, 249); @@ -13,7 +14,7 @@ html, body{ } body { - min-width: 1100px; + min-width: 1310px; height: 100%; } @@ -141,7 +142,7 @@ h1, h2 { .news { - font-size: 20pt; + font-size: 17pt; text-align: justify; } @@ -331,7 +332,7 @@ h1, h2 { } -#sidebar-content.fixed { +.fixed-when-scroll.fixed { position: fixed; top: 30px; } @@ -356,16 +357,10 @@ h1, h2 { -webkit-justify-content: space-between; } -.wroom-clmn-fixed { - width: 200px; - border: 1px solid grey; - margin: 0; -} - -.wroom-clmn { +.inline-flex-container.space-between > div:not(:first-child) { margin-left: 20px; - margin-right: 20px; - /*width: auto;*/ - flex-grow: 1; - align-content: stretch; } + +.clr-m1 { + color: var(--clr-m1); +} \ No newline at end of file diff --git a/app/static/stylesheets/vars.css b/app/static/stylesheets/vars.css index 171acd1..d51d071 100644 --- a/app/static/stylesheets/vars.css +++ b/app/static/stylesheets/vars.css @@ -2,11 +2,11 @@ :root { /* green*/ - /*--clr-m1: #3bb34a;*/ - /*--clr-m1-l: #d8f5db;*/ + --clr-m1: #3bb34a; + --clr-m1-l: #d8f5db; /*purple*/ - --clr-m1: #ae0fff; - --clr-m1-l: #f1dafd; + /*--clr-m1: #ae0fff;*/ + /*--clr-m1-l: #f1dafd;*/ /*orange*/ /*--clr-m1: #e65124;*/ /*--clr-m1-l: #f3d0c6;*/ @@ -17,7 +17,7 @@ /*yellow*/ --clr-c1: #ffdc4b; - --font-text: 'Marmelad', sans-serif ; + --font-text: Verdana, Geneva sans-serif; --font-head: 'Ubuntu', serif; --font-logo: 'Roboto Slab', serif; } \ No newline at end of file diff --git a/app/static/stylesheets/wroom.css b/app/static/stylesheets/wroom.css new file mode 100644 index 0000000..d318230 --- /dev/null +++ b/app/static/stylesheets/wroom.css @@ -0,0 +1,44 @@ +.wroom-clmn-fixed { + min-width: 200px; + margin: 0; + /*background: #d2d2d2;*/ +} + +.wroom-clmn { + flex-grow: 1; + align-content: stretch; + /*background: #d2d2d2;*/ +} + +.wroom-chat-info { + margin-left: 5px; +} + +.wroom-chat-info p { + font-family: var(--font-text); + text-align: justify; + margin-top: 5px; + margin-right: 10px; +} + +.wroom-chat { + max-height: 500px; + overflow-y: scroll; +} + +.wroom-chat::-webkit-scrollbar-track +{ + border: 1px solid black; + /*background-color: var(--clr-m1);*/ +} + +.wroom-chat::-webkit-scrollbar +{ + width: 10px; + /*background-color: white;*/ +} + +.wroom-chat::-webkit-scrollbar-thumb +{ + background-color: var(--clr-m1); +} \ No newline at end of file diff --git a/app/templates/_login_block.html b/app/templates/_login_block.html index 057f993..3eb3310 100644 --- a/app/templates/_login_block.html +++ b/app/templates/_login_block.html @@ -4,10 +4,10 @@

Войти

- {% if args.form == 'login' and args.result == 'false' %}
Неверный логин или пароль!
{% endif %} +
\ No newline at end of file diff --git a/app/templates/base.html b/app/templates/base.html index 0381eed..20dbf35 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -21,7 +21,7 @@ {% if show_sidebar_r %} -
-
+
+ Игроки +
+
+
+ Карта
Чат -
+
+ {% for _ in range(10) %} +
+ +
+ {{ username }} +

+ Lorem Ipsum - это текст-"рыба", часто используемый в печати и вэб-дизайне. Lorem Ipsum является стандартной "рыбой" для текстов на латинице с начала XVI века. В то время некий безымянный печатник создал большую коллекцию размеров и форм шрифтов, используя Lorem Ipsum для распечатки образцов. +

+
+
+ {% endfor %}
-
- Описание карты -
{% endblock %} {% set show_sidebar_r = true %} {% set ub__hide_play_button = true %} {% block sidebar_content %} - {% if username == room.creator %} - - {% endif %} - - - {# {% if username == room.creator %} - - {% endif %} #} +
+ {% if username == room.creator %} + + {% endif %} + + + {# {% if username == room.creator %} + + {% endif %} #} +
{% endblock %} {% block scripts %} From 4245c6011acf025344d09b23f04429913e2a3704 Mon Sep 17 00:00:00 2001 From: Ivan Gaidai-Turlov Date: Sun, 19 May 2019 19:33:42 +0300 Subject: [PATCH 14/32] added input for chat --- app/static/stylesheets/light.css | 8 +++++ app/static/stylesheets/wroom.css | 46 ++++++++++++++++++--------- app/templates/rooms/waiting_room.html | 26 +++++++++++---- 3 files changed, 59 insertions(+), 21 deletions(-) diff --git a/app/static/stylesheets/light.css b/app/static/stylesheets/light.css index 6ce2e3d..afd8b89 100644 --- a/app/static/stylesheets/light.css +++ b/app/static/stylesheets/light.css @@ -99,11 +99,13 @@ h1, h2 { } .name-large { + text-decoration: none; font-family: 'Roboto Slab', serif; font-size: 20pt; } .name-medium { + text-decoration: none; font-family: 'Roboto Slab', serif; font-size: 12pt; } @@ -363,4 +365,10 @@ h1, h2 { .clr-m1 { color: var(--clr-m1); +} + +.time { + color: grey; + font-family: var(--font-text); + font-size: 10pt; } \ No newline at end of file diff --git a/app/static/stylesheets/wroom.css b/app/static/stylesheets/wroom.css index d318230..69b8853 100644 --- a/app/static/stylesheets/wroom.css +++ b/app/static/stylesheets/wroom.css @@ -1,13 +1,10 @@ .wroom-clmn-fixed { - min-width: 200px; margin: 0; - /*background: #d2d2d2;*/ } -.wroom-clmn { +.wroom-clmn-grow { flex-grow: 1; align-content: stretch; - /*background: #d2d2d2;*/ } .wroom-chat-info { @@ -16,29 +13,48 @@ .wroom-chat-info p { font-family: var(--font-text); + font-size: 12pt; text-align: justify; margin-top: 5px; margin-right: 10px; } -.wroom-chat { +.wroom-chat-msgs { + margin-top: 10px; max-height: 500px; overflow-y: scroll; } -.wroom-chat::-webkit-scrollbar-track -{ - border: 1px solid black; - /*background-color: var(--clr-m1);*/ +.scrollbar::-webkit-scrollbar-track { + /*border: 1px solid black;*/ } -.wroom-chat::-webkit-scrollbar -{ - width: 10px; +.scrollbar::-webkit-scrollbar { + width: 5px; /*background-color: white;*/ } -.wroom-chat::-webkit-scrollbar-thumb -{ +.scrollbar::-webkit-scrollbar-thumb { background-color: var(--clr-m1); -} \ No newline at end of file +} + +.chat-input { + margin-top: 10px; + font-size: 12pt; + overflow-x: hidden; + font-family: var(--font-text); + border: 1px solid grey; + border-radius: 2px; + word-break: break-all; + max-height: 120px; + padding: 4px; +} + +.chat-input:focus { + outline: none; +} + +.chat-input:empty:not(:focus):before { + content:attr(data-placeholder); + color: grey; +} diff --git a/app/templates/rooms/waiting_room.html b/app/templates/rooms/waiting_room.html index 6cfa972..f512638 100644 --- a/app/templates/rooms/waiting_room.html +++ b/app/templates/rooms/waiting_room.html @@ -7,28 +7,42 @@ {{ room.name }}
-
+
Игроки
-
+
Карта +
+
+
+ +
+

+ Описание карты. Lorem Ipsum - это текст-"рыба", часто используемый в печати и вэб-дизайне. Lorem Ipsum является стандартной "рыбой" для текстов на латинице с начала XVI века. В то время некий безымянный печатник создал большую коллекцию размеров и форм шрифтов, используя Lorem Ipsum для распечатки образцов. +

+
-
+
Чат -
- {% for _ in range(10) %} +
+ {% for i in range(10) %}
{{ username }} + 13:{{ 44+i}}

- Lorem Ipsum - это текст-"рыба", часто используемый в печати и вэб-дизайне. Lorem Ipsum является стандартной "рыбой" для текстов на латинице с начала XVI века. В то время некий безымянный печатник создал большую коллекцию размеров и форм шрифтов, используя Lorem Ipsum для распечатки образцов. +Lorem Ipsum - это текст-"рыба", часто используемый в печати и вэб-дизайне. Lorem Ipsum является стандартной "рыбой" для текстов на латинице с начала XVI века. В то время некий безымянный печатник создал большую коллекцию размеров и форм шрифтов, используя Lorem Ipsum для распечатки образцов.

{% endfor %}
+
+
+
{% endblock %} From 96de2d8ad997860287aefa2e190310c774982722 Mon Sep 17 00:00:00 2001 From: Ivan Gaidai-Turlov Date: Sun, 19 May 2019 22:18:05 +0300 Subject: [PATCH 15/32] fixed contenteditable='plaintext-only' in mozila firefox --- app/help_functions.py | 2 +- app/static/stylesheets/wroom.css | 2 +- app/templates/rooms/waiting_room.html | 17 ++++++++++++++--- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/app/help_functions.py b/app/help_functions.py index 13e8736..a5f510e 100644 --- a/app/help_functions.py +++ b/app/help_functions.py @@ -1,4 +1,4 @@ -from flask import request, render_template, session, redirect +from flask import request, render_template, session, redirect, url_for from functools import wraps from app import db diff --git a/app/static/stylesheets/wroom.css b/app/static/stylesheets/wroom.css index 69b8853..2af0c6a 100644 --- a/app/static/stylesheets/wroom.css +++ b/app/static/stylesheets/wroom.css @@ -54,7 +54,7 @@ outline: none; } -.chat-input:empty:not(:focus):before { +.chat-input:empty:before { content:attr(data-placeholder); color: grey; } diff --git a/app/templates/rooms/waiting_room.html b/app/templates/rooms/waiting_room.html index f512638..b245b65 100644 --- a/app/templates/rooms/waiting_room.html +++ b/app/templates/rooms/waiting_room.html @@ -40,8 +40,8 @@ {% endfor %}
-
+
@@ -63,7 +63,18 @@ {% endblock %} {% block scripts %} - + \ No newline at end of file diff --git a/app/templates/rooms/waiting_room.html b/app/templates/rooms/waiting_room.html index b245b65..6f38ce2 100644 --- a/app/templates/rooms/waiting_room.html +++ b/app/templates/rooms/waiting_room.html @@ -25,7 +25,7 @@
Чат -
+
{% for i in range(10) %}
@@ -40,8 +40,8 @@ {% endfor %}
-
+
@@ -63,17 +63,7 @@ {% endblock %} {% block scripts %} - + {% include 'js/contenteditable.js' %} diff --git a/app/templates/js/onchange.js b/app/templates/js/onchange.js new file mode 100644 index 0000000..337ef09 --- /dev/null +++ b/app/templates/js/onchange.js @@ -0,0 +1,18 @@ + \ No newline at end of file diff --git a/app/templates/js/toggle.js b/app/templates/js/toggle.js new file mode 100644 index 0000000..96bad56 --- /dev/null +++ b/app/templates/js/toggle.js @@ -0,0 +1,64 @@ + \ No newline at end of file diff --git a/app/templates/js/wroom.js b/app/templates/js/wroom.js new file mode 100644 index 0000000..081c92c --- /dev/null +++ b/app/templates/js/wroom.js @@ -0,0 +1,86 @@ + \ No newline at end of file diff --git a/app/templates/rooms/game_room.html b/app/templates/rooms/game_room.html index e9faacf..5a79aa1 100644 --- a/app/templates/rooms/game_room.html +++ b/app/templates/rooms/game_room.html @@ -51,5 +51,8 @@ Description: {% autoescape false %}{{ room.description.split('\n') | join('
')}}{% endautoescape %}
{% endif %} - +{% endblock %} + +{% blcok scripts %} + {% include 'js/groom.js' %} {% endblock %} \ No newline at end of file diff --git a/app/templates/rooms/waiting_room.html b/app/templates/rooms/waiting_room.html index 6f38ce2..100dedc 100644 --- a/app/templates/rooms/waiting_room.html +++ b/app/templates/rooms/waiting_room.html @@ -3,8 +3,12 @@ {% set title = room.name %} {% block content %} -
- {{ room.name }} +
+ + +
@@ -39,9 +43,17 @@
{% endfor %}
-
-
+
+ +
+
+
+ +
+ {#
#}
@@ -63,91 +75,7 @@ {% endblock %} {% block scripts %} - {% include 'js/contenteditable.js' %} - + {% include 'js/contenteditable.js' %} + {% include 'js/onchange.js' %} + {% include 'js/wroom.js' %} {% endblock %} From 3784d9b5b49c06424c8865a33743fed682dc3a0c Mon Sep 17 00:00:00 2001 From: Ivan Gaidai-Turlov Date: Mon, 20 May 2019 18:19:25 +0300 Subject: [PATCH 20/32] added working reset button --- app/static/js/game_room.js | 191 -------------------------- app/static/js/toggle.js | 62 --------- app/static/stylesheets/wroom.css | 2 +- app/templates/js/groom.js | 12 +- app/templates/rooms/waiting_room.html | 11 +- 5 files changed, 13 insertions(+), 265 deletions(-) delete mode 100644 app/static/js/game_room.js delete mode 100644 app/static/js/toggle.js diff --git a/app/static/js/game_room.js b/app/static/js/game_room.js deleted file mode 100644 index 5438f50..0000000 --- a/app/static/js/game_room.js +++ /dev/null @@ -1,191 +0,0 @@ -function xhrOpen(eventType) { - var xhr = new XMLHttpRequest(); - - xhr.open('POST', document.getElementById('data').dataset.post, false); - xhr.setRequestHeader('Event-Type', eventType); - xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); - - return xhr; -}; - -function makeTurnFromInput(event) { - if (event.keyCode == 13) { - var xhr = xhrOpen('turn'); - var turn = document.getElementById('input').value; - - xhr.send('turn=' + turn); - }; -} - -function makeTurn(turn) { - var xhr = xhrOpen('turn'); - xhr.send('turn=' + turn); -}; - -function getUpdate() { - var xhr = xhrOpen('update'); - xhr.send(); - console.log(xhr.responseText); - responseData = JSON.parse(xhr.responseText); - console.log(responseData); - - var log = document.getElementById('log'); - msg = document.createElement('p'); - msg.innerHTML = responseData.msg.join('
'); - log.appendChild(msg); - - clearBars(); - responseData.bars.forEach(function(entry) { - switch(entry.type) { - case 'common': - addCommonBar(entry.name, entry.value); - }; - }); - - var turnState = document.getElementById('your-turn'); - // 1 - my turn - // 2 - not my turn - // 0 - game ended - - if (responseData.game_state == 1) { - turnState.innerHTML = 'Твой ход'; - removeAllButtons(); - responseData.buttons.forEach(function(entry) { - switch(entry.type) { - case 'button': - addCommonButton(entry.turns[0], entry.image); - break; - case 'lbutton': - addListButton(entry.turns, entry.image, entry.turn_images); - break; - case 'dbutton': - addDirectionButton(entry.turns, entry.image, entry.turn_images); - break; - }; - }); - - } else if (responseData.game_state == 2) { - removeAllButtons(); - turnState.innerHTML = 'Подожди'; - } else if (responseData.game_state == 0) { - removeAllButtons(); - turnState.innerHTML = 'Игра окончена'; - } - - $('#log').scrollTop(1000000000); -}; - -// Interface - -// Buttons -function addCommonButton(turn, image) { - var button = document.createElement('div'); - - button.className = 'common-turn-button' - button.innerHTML = ''; - function mt() { - makeTurn(turn); - }; - button.onclick = mt; - - var buttonsBar = document.getElementById('buttons_bar'); - buttonsBar.appendChild(button); -}; - -function addListButton(turns, image, turn_images) { - var buttonsBar = document.getElementById('buttons_bar'); - - // var buttonContainer document.createElement('div'); - var button = document.createElement('div'); - var buttonImage = document.createElement('img'); - var turnsContainer = document.createElement('div'); - var buttonContainer = document.createElement('div'); - - button.className = 'list-game-button'; - turnsContainer.className = 'list-turns-container'; - buttonContainer.className = 'list-button-container'; - - buttonImage.setAttribute('src', image); - button.appendChild(buttonImage); - - buttonContainer.appendChild(button); - buttonContainer.appendChild(turnsContainer); - - for (var i = 0; i < turns.length; i++) { - var buttonTurn = document.createElement('div'); - - buttonTurn.className = 'list-turn-button'; - - var buttonTurnImage = document.createElement('img'); - buttonTurnImage.setAttribute('src', turn_images[i]); - - function mtg(k) { - function mt() { - makeTurn(turns[k]) - } - return mt - }; - buttonTurn.onclick = mtg(i); - - buttonTurn.appendChild(buttonTurnImage); - turnsContainer.appendChild(buttonTurn); - } - buttonsBar.appendChild(buttonContainer); -}; - -function addDirectionButton() { - var buttonsBar = document.getElementById('buttonsBar') -} - -function removeAllButtons() { - var buttonsBar = document.getElementById('buttons_bar'); - while (buttonsBar.firstChild) { - buttonsBar.removeChild(buttonsBar.firstChild); - }; -}; - - // Bars - -function addCommonBar(name, value) { - // Бомбы: 3
- resourceName = document.createElement('span'); - resourceName.classsName = 'resource-name'; - resourceName.innerHTML = name + ': '; - - resourceValue = document.createElement('span'); - resourceValue.className = 'resource-value'; - resourceValue.innerHTML = value; - - br = document.createElement('br'); - - var turnState = document.getElementById('turn-state'); - turnState.appendChild(resourceName); - turnState.appendChild(resourceValue); - turnState.appendChild(br); -} - -function clearBars() { - var turnState = document.getElementById('turn-state'); - turnState.innerHTML = ''; -} - -// When the document is loaded -function ready() { - getUpdate(); - var socket = io.connect('http://' + document.domain + ':' + location.port + '/' + document.getElementById('data').dataset.room_id); - socket.on('update', function(msg) { - switch (msg.event) { - case 'player_make_turn': - getUpdate(); - break; - }; - }); - socket.on('connect', function() { - socket.emit('player join', {'room_id': document.getElementById('data').dataset.room_id}); - }); -}; - -var turnInput = document.getElementById('input'); -turnInput.onkeydown = makeTurnFromInput; - -document.addEventListener("DOMContentLoaded", ready); diff --git a/app/static/js/toggle.js b/app/static/js/toggle.js deleted file mode 100644 index c2f0bd3..0000000 --- a/app/static/js/toggle.js +++ /dev/null @@ -1,62 +0,0 @@ -function getRealDisplay(elem) { - if (elem.currentStyle) { - return elem.currentStyle.display - } else if (window.getComputedStyle) { - var computedStyle = window.getComputedStyle(elem, null ) - - return computedStyle.getPropertyValue('display') - } -} - -function hide(el) { - if (!el.getAttribute('displayOld')) { - el.setAttribute("displayOld", el.style.display) - } - - el.style.display = "none" -} - -displayCache = {} - -function isHidden(el) { - var width = el.offsetWidth, height = el.offsetHeight, - tr = el.nodeName.toLowerCase() === "tr" - - return width === 0 && height === 0 && !tr ? - true : width > 0 && height > 0 && !tr ? false : getRealDisplay(el) -} - -function toggle(el) { - isHidden(el) ? show(el) : hide(el) -} - - -function show(el) { - - if (getRealDisplay(el) != 'none') return - - var old = el.getAttribute("displayOld"); - el.style.display = old || ""; - - if ( getRealDisplay(el) === "none" ) { - var nodeName = el.nodeName, body = document.body, display - - if ( displayCache[nodeName] ) { - display = displayCache[nodeName] - } else { - var testElem = document.createElement(nodeName) - body.appendChild(testElem) - display = getRealDisplay(testElem) - - if (display === "none" ) { - display = "block" - } - - body.removeChild(testElem) - displayCache[nodeName] = display - } - - el.setAttribute('displayOld', display) - el.style.display = display - } -} diff --git a/app/static/stylesheets/wroom.css b/app/static/stylesheets/wroom.css index 0c20c12..eb18588 100644 --- a/app/static/stylesheets/wroom.css +++ b/app/static/stylesheets/wroom.css @@ -66,7 +66,7 @@ } .save_roomname{ - margin-left: 5px; + margin-left: 10px; } diff --git a/app/templates/js/groom.js b/app/templates/js/groom.js index c864830..17f1aae 100644 --- a/app/templates/js/groom.js +++ b/app/templates/js/groom.js @@ -146,7 +146,6 @@ }; // Bars - function addCommonBar(name, value) { // Бомбы: 3
resourceName = document.createElement('span'); @@ -166,12 +165,11 @@ } function clearBars() { - var turnState = document.getElementById('turn-state'); - turnState.innerHTML = ''; + $('#turn-state').html(''); } // When the document is loaded - function ready() { + $(document).ready(function(){ getUpdate(); var socket = io.connect('http://' + document.domain + ':' + location.port + '/' + document.getElementById('data').dataset.room_id); socket.on('update', function(msg) { @@ -182,12 +180,10 @@ }; }); socket.on('connect', function() { - socket.emit('player join', {'room_id': document.getElementById('data').dataset.room_id}); + socket.emit('player join', {'room_id': '{{ room.id }}' } }); - }; + }); var turnInput = document.getElementById('input'); turnInput.onkeydown = makeTurnFromInput; - - document.addEventListener("DOMContentLoaded", ready); diff --git a/app/templates/rooms/waiting_room.html b/app/templates/rooms/waiting_room.html index 100dedc..2f265af 100644 --- a/app/templates/rooms/waiting_room.html +++ b/app/templates/rooms/waiting_room.html @@ -8,14 +8,14 @@ data-show-on-change='.save_roomname' value='{{ room.name }}' maxlength='25' style='width: 500px;'> - +
Игроки
-
+{#
Карта

@@ -26,7 +26,7 @@ Описание карты. Lorem Ipsum - это текст-"рыба", часто используемый в печати и вэб-дизайне. Lorem Ipsum является стандартной "рыбой" для текстов на латинице с начала XVI века. В то время некий безымянный печатник создал большую коллекцию размеров и форм шрифтов, используя Lorem Ipsum для распечатки образцов.

-
+
#}
Чат
@@ -75,6 +75,11 @@ {% endblock %} {% block scripts %} + {% include 'js/contenteditable.js' %} {% include 'js/onchange.js' %} {% include 'js/wroom.js' %} From 9b92e5670c47e87a2462204fb86beeeee54ff3f4 Mon Sep 17 00:00:00 2001 From: Ivan Gaidai-Turlov Date: Mon, 20 May 2019 18:46:53 +0300 Subject: [PATCH 21/32] added helper --- app/templates/rooms/waiting_room.html | 29 +++++++++++++++++---------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/app/templates/rooms/waiting_room.html b/app/templates/rooms/waiting_room.html index 2f265af..8d7cb94 100644 --- a/app/templates/rooms/waiting_room.html +++ b/app/templates/rooms/waiting_room.html @@ -3,12 +3,21 @@ {% set title = room.name %} {% block content %} -
- - - +
+ {% if username == room.creator %} +
+ + + +
+
+ Вы может изменить имя просто нажав на него.Больше не показывать эту подсказку. +
+ {% else %} + {{ room.name }} + {% endif %}
@@ -37,6 +46,7 @@ {{ username }} 13:{{ 44+i}}

+ {# kek #} Lorem Ipsum - это текст-"рыба", часто используемый в печати и вэб-дизайне. Lorem Ipsum является стандартной "рыбой" для текстов на латинице с начала XVI века. В то время некий безымянный печатник создал большую коллекцию размеров и форм шрифтов, используя Lorem Ipsum для распечатки образцов.

@@ -53,7 +63,6 @@
- {#
#}
@@ -68,17 +77,15 @@ {% endif %} - {# {% if username == room.creator %} - - {% endif %} #} {% endblock %} {% block scripts %} {% include 'js/contenteditable.js' %} {% include 'js/onchange.js' %} From 972228345c94faffcf3722b340b5c18df5171299 Mon Sep 17 00:00:00 2001 From: Ivan Gaidai-Turlov Date: Mon, 20 May 2019 22:01:36 +0300 Subject: [PATCH 22/32] fixed autocomplete --- app/templates/rooms/waiting_room.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/templates/rooms/waiting_room.html b/app/templates/rooms/waiting_room.html index 8d7cb94..681d5d6 100644 --- a/app/templates/rooms/waiting_room.html +++ b/app/templates/rooms/waiting_room.html @@ -8,7 +8,8 @@
+ autocomplete="off" value='{{ room.name }}' maxlength='25' + style='width: 500px;'>
From b076345147169d890ff26d388fd6fab7f94bbfd9 Mon Sep 17 00:00:00 2001 From: Ivan Gaidai-Turlov Date: Tue, 21 May 2019 17:14:52 +0300 Subject: [PATCH 23/32] fixed groom.js --- app/static/stylesheets/light.css | 6 +++++- app/templates/base.html | 13 ++++++++----- app/templates/js/groom.js | 4 +--- app/templates/rooms/game_room.html | 3 --- app/templates/rooms/room_list.html | 12 ++++++++++++ app/templates/rooms/waiting_room.html | 20 +++++++++++++++++++- 6 files changed, 45 insertions(+), 13 deletions(-) diff --git a/app/static/stylesheets/light.css b/app/static/stylesheets/light.css index 4be03fb..79b4b7b 100644 --- a/app/static/stylesheets/light.css +++ b/app/static/stylesheets/light.css @@ -335,8 +335,12 @@ h1, h2 { } #sidebar-content { - border-left: 5px solid var(--clr-m1); + /*padding-left: 10px;*/ +} + +#sidebar-content > div { padding-left: 10px; + border-left: 5px solid var(--clr-m1); } diff --git a/app/templates/base.html b/app/templates/base.html index 20dbf35..75097b7 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -22,11 +22,14 @@ {% if show_sidebar_r %} diff --git a/app/templates/js/groom.js b/app/templates/js/groom.js index 17f1aae..3a6dd04 100644 --- a/app/templates/js/groom.js +++ b/app/templates/js/groom.js @@ -26,9 +26,7 @@ function getUpdate() { var xhr = xhrOpen('update'); xhr.send(); - console.log(xhr.responseText); responseData = JSON.parse(xhr.responseText); - console.log(responseData); var log = document.getElementById('log'); msg = document.createElement('p'); @@ -180,7 +178,7 @@ }; }); socket.on('connect', function() { - socket.emit('player join', {'room_id': '{{ room.id }}' } + socket.emit('player join', {'room_id': '{{ room.id }}' }) }); }); diff --git a/app/templates/rooms/game_room.html b/app/templates/rooms/game_room.html index 5a79aa1..6f7ef14 100644 --- a/app/templates/rooms/game_room.html +++ b/app/templates/rooms/game_room.html @@ -51,8 +51,5 @@ Description: {% autoescape false %}{{ room.description.split('\n') | join('
')}}{% endautoescape %}
{% endif %} -{% endblock %} - -{% blcok scripts %} {% include 'js/groom.js' %} {% endblock %} \ No newline at end of file diff --git a/app/templates/rooms/room_list.html b/app/templates/rooms/room_list.html index 9174963..72b9184 100644 --- a/app/templates/rooms/room_list.html +++ b/app/templates/rooms/room_list.html @@ -33,6 +33,18 @@

Список комнат

{% endblock %} {% block sidebar_content %} +
+
+ Фильтры поиска +
+ {% for i in range(10) %} + + {% endfor %} +
+
+{% endblock %} + +{% block ub__actions %}
diff --git a/app/templates/rooms/waiting_room.html b/app/templates/rooms/waiting_room.html index 681d5d6..9dc0164 100644 --- a/app/templates/rooms/waiting_room.html +++ b/app/templates/rooms/waiting_room.html @@ -14,7 +14,7 @@
- Вы может изменить имя просто нажав на него.Больше не показывать эту подсказку. + Вы может изменить имя просто нажав на него, или перейдя в настройки.Больше не показывать эту подсказку.
{% else %} {{ room.name }} @@ -72,15 +72,33 @@ {% set show_sidebar_r = true %} {% set ub__hide_play_button = true %} {% block sidebar_content %} +
+
+ Карта +
+
+
+ +
+

+ Описание карты. Lorem Ipsum - это текст-"рыба", часто используемый в печати и вэб-дизайне. Lorem Ipsum является стандартной "рыбой" для текстов на латинице с начала XVI века. В то время некий безымянный печатник создал большую коллекцию размеров и форм шрифтов, используя Lorem Ipsum для распечатки образцов. +

+
+
+{% endblock %} + +{% block ub__actions %}
{% if username == room.creator %} + {% endif %}
{% endblock %} + {% block scripts %} \ No newline at end of file From 7275117b4fe6221265b8c1be9048f70cc161121e Mon Sep 17 00:00:00 2001 From: Ivan Gaidai-Turlov Date: Wed, 22 May 2019 18:40:32 +0300 Subject: [PATCH 25/32] added changing room name --- app/routes.py | 15 ++++++---- app/static/stylesheets/wroom.css | 3 +- app/templates/js/wroom.js | 9 ++++-- app/templates/rooms/waiting_room.html | 40 ++++++++++++++------------- database/room.py | 3 +- 5 files changed, 40 insertions(+), 30 deletions(-) diff --git a/app/routes.py b/app/routes.py index 9bff67b..bfb0d69 100644 --- a/app/routes.py +++ b/app/routes.py @@ -166,23 +166,26 @@ def waiting_room(room_id): if request.method == 'POST': event_type = request.headers.get('Event-Type') - if event_type == 'change_settings': - name = request.form.get('name') + if event_type == 'changed_settings': + name = request.form.get('roomname') description = request.form.get('description') map_id = request.form.get('map_id') + answer = [] if name: - db.rooms.set_name(room_id, name) + answer.append(db.rooms.set_name(room_id, name).info) if description: - db.rooms.set_description(room_id, description) + answer.append(db.rooms.set_description(room_id, description).info) if map_id: lr_map = db.maps.get(map_id).to_dict() else: lr_map = None - db.rooms.set_map(room_id, map_id) + if map_id: + answer.append(db.rooms.set_map(room_id, map_id).info) room = db.rooms.get(room_id) emit('update', {'event': 'change_settings', 'description': room.description, 'name': room.name, 'map': lr_map}, broadcast=True, namespace='/'+room_id) + return str(answer) elif event_type == 'start_game': imagepath='/static/images/button_images/' @@ -202,6 +205,8 @@ def waiting_room(room_id): elif event_type == 'get_players_list': return simple_render_template('rooms/_player_list.html', room=db.rooms.get(room_id)) + return '' + username = session.get('username') labyrinth = db.lrm.get_labyrinth(room_id) if labyrinth is not None and username in [user.get_username() for user in labyrinth.players_list]: diff --git a/app/static/stylesheets/wroom.css b/app/static/stylesheets/wroom.css index 16e169a..0fa5d0c 100644 --- a/app/static/stylesheets/wroom.css +++ b/app/static/stylesheets/wroom.css @@ -69,12 +69,11 @@ content: ''; } -.save_roomname{ +#reset_roomname { margin-left: 10px; } - .edit-icon { fill: grey; } diff --git a/app/templates/js/wroom.js b/app/templates/js/wroom.js index 081c92c..fe03ae2 100644 --- a/app/templates/js/wroom.js +++ b/app/templates/js/wroom.js @@ -32,10 +32,13 @@ socket.on('update', function(msg) { switch (msg.event) { case 'change_settings': - $('#title').html(msg.name); + $('#roomname').attr('data-saved-value', msg.name).html(msg.name).trigger('change'); + // $('#roomname').trigger('change'); $('#description').html('Описание:
' + msg.description.replace(/\n/g, '
')); - $('#map_name').html('Карта:' + msg.map.name); - $('#map_description').html('Описание карты:
' + msg.map.description.replace(/\n/g, '
')); + if (msg.map) { + $('#map_name').html('Карта:' + msg.map.name); + $('#map_description').html('Описание карты:
' + msg.map.description.replace(/\n/g, '
')); + } break; case 'player_enter_or_leave': diff --git a/app/templates/rooms/waiting_room.html b/app/templates/rooms/waiting_room.html index 9dc0164..201a988 100644 --- a/app/templates/rooms/waiting_room.html +++ b/app/templates/rooms/waiting_room.html @@ -5,19 +5,19 @@ {% block content %}
{% if username == room.creator %} -
+
- - + +
Вы может изменить имя просто нажав на него, или перейдя в настройки.Больше не показывать эту подсказку.
{% else %} - {{ room.name }} + {{ room.name }} {% endif %}
@@ -25,18 +25,6 @@ Игроки
-{#
- Карта -
-
-
- -
-

- Описание карты. Lorem Ipsum - это текст-"рыба", часто используемый в печати и вэб-дизайне. Lorem Ipsum является стандартной "рыбой" для текстов на латинице с начала XVI века. В то время некий безымянный печатник создал большую коллекцию размеров и форм шрифтов, используя Lorem Ipsum для распечатки образцов. -

-
-
#}
Чат
@@ -100,8 +88,21 @@ {% block scripts %} - + {% block scripts %}{% endblock %} From 9e60e7ec8aef38a596725c2d71b5fd7e9f582c99 Mon Sep 17 00:00:00 2001 From: Ivan Gaidai-Turlov Date: Sat, 25 May 2019 23:02:09 +0300 Subject: [PATCH 30/32] added css asset --- app/__init__.py | 7 +++- app/css_asset.py | 17 +++++++++ app/static/{stylesheets => css}/buttons.css | 0 app/static/{stylesheets => css}/form.css | 0 app/static/{stylesheets => css}/groom.css | 0 app/static/css/header.css | 36 +++++++++++++++++++ .../{stylesheets => css}/info_block.css | 0 app/static/{stylesheets => css}/light.css | 14 ++------ .../{stylesheets => css}/room_block.css | 0 app/static/{stylesheets => css}/svg.css | 0 .../{stylesheets => css}/user_block.css | 0 app/static/{stylesheets => css}/vars.css | 0 app/static/{stylesheets => css}/wroom.css | 0 app/templates/base.html | 2 +- app/templates/head.html | 5 ++- 15 files changed, 67 insertions(+), 14 deletions(-) create mode 100644 app/css_asset.py rename app/static/{stylesheets => css}/buttons.css (100%) rename app/static/{stylesheets => css}/form.css (100%) rename app/static/{stylesheets => css}/groom.css (100%) create mode 100644 app/static/css/header.css rename app/static/{stylesheets => css}/info_block.css (100%) rename app/static/{stylesheets => css}/light.css (93%) rename app/static/{stylesheets => css}/room_block.css (100%) rename app/static/{stylesheets => css}/svg.css (100%) rename app/static/{stylesheets => css}/user_block.css (100%) rename app/static/{stylesheets => css}/vars.css (100%) rename app/static/{stylesheets => css}/wroom.css (100%) diff --git a/app/__init__.py b/app/__init__.py index 08e17c4..4ca07e9 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -1,10 +1,15 @@ -from flask import Flask, request from database import Database +from flask import Flask, request from flask_socketio import SocketIO +from flask_assets import Environment +from app.css_asset import css_asset app = Flask(__name__) app.config['SECRET_KEY'] = "qw75rs7fs5je5dd4s3sdf4s5liduf4dgg7fg6h5" +app.config['ASSETS_DEBUG'] = True socketio = SocketIO(app) +assets = Environment(app) +assets.register('css_all', css_asset) db = Database() from app.room_namespace import init_room_namespaces diff --git a/app/css_asset.py b/app/css_asset.py new file mode 100644 index 0000000..fad532c --- /dev/null +++ b/app/css_asset.py @@ -0,0 +1,17 @@ +from flask_assets import Bundle + +css_asset = Bundle( + 'css/vars.css', + 'css/buttons.css', + 'css/groom.css', + 'css/header.css', + 'css/info_block.css', + 'css/light.css', + 'css/room_block.css', + 'css/svg.css', + 'css/user_block.css', + 'css/wroom.css', + 'css/form.css', + filters='cssmin', + output='assets/all-min.css' + ) \ No newline at end of file diff --git a/app/static/stylesheets/buttons.css b/app/static/css/buttons.css similarity index 100% rename from app/static/stylesheets/buttons.css rename to app/static/css/buttons.css diff --git a/app/static/stylesheets/form.css b/app/static/css/form.css similarity index 100% rename from app/static/stylesheets/form.css rename to app/static/css/form.css diff --git a/app/static/stylesheets/groom.css b/app/static/css/groom.css similarity index 100% rename from app/static/stylesheets/groom.css rename to app/static/css/groom.css diff --git a/app/static/css/header.css b/app/static/css/header.css new file mode 100644 index 0000000..625c32f --- /dev/null +++ b/app/static/css/header.css @@ -0,0 +1,36 @@ +#logo { + position: relative; + float: left; + font-size: 30pt; + padding-left: 20px; + padding-right: 20px; + height: inherit; + font-family: var(--font-logo); + text-decoration: none; + color: #ffffff; + text-shadow: 0px 2px 0px #00000024; + background: var(--clr-m1); +} + +.header { + display: flexbox; + height: 50px; + background: var(--clr-m1); +} + +.header a:not(#logo) { + float: right; + margin: 10px; + color: #ffffff; + text-decoration: none; + font-family: var(--font-logo); + font-size: 14pt; + padding: 2px; + padding-left: 10px; + padding-right: 10px; +} + +.header a:hover:not(#logo) { + background: #ffffff24; + border-radius: 50px 50px 50px 50px; +} \ No newline at end of file diff --git a/app/static/stylesheets/info_block.css b/app/static/css/info_block.css similarity index 100% rename from app/static/stylesheets/info_block.css rename to app/static/css/info_block.css diff --git a/app/static/stylesheets/light.css b/app/static/css/light.css similarity index 93% rename from app/static/stylesheets/light.css rename to app/static/css/light.css index ba6df19..f7980d0 100644 --- a/app/static/stylesheets/light.css +++ b/app/static/css/light.css @@ -1,13 +1,3 @@ -@import url('buttons.css'); -@import url('form.css'); -@import url('info_block.css'); -@import url('vars.css'); -@import url('svg.css'); -@import url('room_block.css'); -@import url('user_block.css'); -@import url('wroom.css'); -@import url('groom.css'); - html, body{ background: rgb(249, 249, 249); margin: 0; @@ -62,11 +52,12 @@ h1, h2 { font-size: 30pt; padding-left: 20px; padding-right: 20px; + height: inherit; + font-family: var(--font-logo); text-decoration: none; color: #ffffff; text-shadow: 0px 2px 0px #00000024; background: var(--clr-m1); - height: inherit; } .header { @@ -80,6 +71,7 @@ h1, h2 { margin: 10px; color: #ffffff; text-decoration: none; + font-family: var(--font-logo); font-size: 14pt; padding: 2px; padding-left: 10px; diff --git a/app/static/stylesheets/room_block.css b/app/static/css/room_block.css similarity index 100% rename from app/static/stylesheets/room_block.css rename to app/static/css/room_block.css diff --git a/app/static/stylesheets/svg.css b/app/static/css/svg.css similarity index 100% rename from app/static/stylesheets/svg.css rename to app/static/css/svg.css diff --git a/app/static/stylesheets/user_block.css b/app/static/css/user_block.css similarity index 100% rename from app/static/stylesheets/user_block.css rename to app/static/css/user_block.css diff --git a/app/static/stylesheets/vars.css b/app/static/css/vars.css similarity index 100% rename from app/static/stylesheets/vars.css rename to app/static/css/vars.css diff --git a/app/static/stylesheets/wroom.css b/app/static/css/wroom.css similarity index 100% rename from app/static/stylesheets/wroom.css rename to app/static/css/wroom.css diff --git a/app/templates/base.html b/app/templates/base.html index 2c13e46..a1aac23 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -2,7 +2,7 @@ {% block body %} {% if not hide_header %} -
+
{% if username == None %} Регистрация diff --git a/app/templates/head.html b/app/templates/head.html index cc8c924..ea64121 100644 --- a/app/templates/head.html +++ b/app/templates/head.html @@ -4,7 +4,10 @@ {{ title or 'Лабиринт' }} - + {# #} + {% assets "css_all" %} + + {% endassets %} From 696a59f08d547d5554055751ea2b6d36d3e6afb5 Mon Sep 17 00:00:00 2001 From: Ivan Gaidai-Turlov Date: Sat, 25 May 2019 23:07:29 +0300 Subject: [PATCH 31/32] update gitignore --- .gitignore | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 90d3926..f8406cf 100644 --- a/.gitignore +++ b/.gitignore @@ -107,4 +107,7 @@ venv.bak/ .idea/ # Database. let it always be empty -*.db \ No newline at end of file +*.db + +# CSS assets +all-min.css \ No newline at end of file From e06de06f50fb8c4eb50f6fcfac84ee3e43d37b4e Mon Sep 17 00:00:00 2001 From: Ivan Gaidai-Turlov Date: Sat, 25 May 2019 23:16:38 +0300 Subject: [PATCH 32/32] fixed bugs --- app/static/css/header.css | 4 ++-- app/static/css/light.css | 39 --------------------------------------- 2 files changed, 2 insertions(+), 41 deletions(-) diff --git a/app/static/css/header.css b/app/static/css/header.css index 625c32f..de498d2 100644 --- a/app/static/css/header.css +++ b/app/static/css/header.css @@ -8,7 +8,7 @@ font-family: var(--font-logo); text-decoration: none; color: #ffffff; - text-shadow: 0px 2px 0px #00000024; + text-shadow: 0px 2px 0px #01010124; background: var(--clr-m1); } @@ -31,6 +31,6 @@ } .header a:hover:not(#logo) { - background: #ffffff24; + background: #fefefe24; border-radius: 50px 50px 50px 50px; } \ No newline at end of file diff --git a/app/static/css/light.css b/app/static/css/light.css index f7980d0..c15b817 100644 --- a/app/static/css/light.css +++ b/app/static/css/light.css @@ -44,45 +44,6 @@ h1, h2 { padding: 0; } - -/* HEADER */ -#logo { - position: relative; - float: left; - font-size: 30pt; - padding-left: 20px; - padding-right: 20px; - height: inherit; - font-family: var(--font-logo); - text-decoration: none; - color: #ffffff; - text-shadow: 0px 2px 0px #00000024; - background: var(--clr-m1); -} - -.header { - display: flexbox; - height: 50px; - background: var(--clr-m1); -} - -.header a:not(#logo) { - float: right; - margin: 10px; - color: #ffffff; - text-decoration: none; - font-family: var(--font-logo); - font-size: 14pt; - padding: 2px; - padding-left: 10px; - padding-right: 10px; -} - -.header a:hover:not(#logo) { - background: #ffffff24; - border-radius: 50px 50px 50px 50px; -} - .sidebar-r { width: 300px; height: 100%;