Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
1851b74
added showing users
gtivansan May 11, 2019
d0b0a37
added background for self
gtivansan May 11, 2019
9921708
added colors
gtivansan May 11, 2019
225003a
fixed script
gtivansan May 12, 2019
70e7366
added "login_required" decorator to some routes
gtivansan May 12, 2019
a7c112c
deleted trash
gtivansan May 12, 2019
6a59ebe
Merge branch 'LR-184-sqlite3_error' into LR-design-waiting_room
gtivansan May 14, 2019
4f676aa
into project introduced jquerry
gtivansan May 15, 2019
e734e4e
added new styles.
gtivansan May 15, 2019
ed20f62
fixed cursor
gtivansan May 15, 2019
70a0fe5
added some wroom styles
gtivansan May 16, 2019
7c0fd98
Update waiting_room.html
gtivansan May 16, 2019
d2dee4c
Update user_block.css
gtivansan May 16, 2019
68380e7
added chat-msg styles prototype
gtivansan May 18, 2019
4245c60
added input for chat
gtivansan May 19, 2019
96de2d8
fixed contenteditable='plaintext-only' in mozila firefox
gtivansan May 19, 2019
25cc20c
contenteditable.js
gtivansan May 20, 2019
75f5fa1
Merge remote-tracking branch 'labyrinth/master' into LR-design-waitin…
gtivansan May 20, 2019
3c6395a
fixed merge mistakes
gtivansan May 20, 2019
c886268
renamed
gtivansan May 20, 2019
5fc0e98
added design for changeble roomname
gtivansan May 20, 2019
3784d9b
added working reset button
gtivansan May 20, 2019
9b92e56
added helper
gtivansan May 20, 2019
9722283
fixed autocomplete
gtivansan May 20, 2019
b076345
fixed groom.js
gtivansan May 21, 2019
ac53759
fixed placeholder
gtivansan May 22, 2019
7275117
added changing room name
gtivansan May 22, 2019
2f1e736
fixed overflow
gtivansan May 22, 2019
8adec6c
deleted trash
gtivansan May 22, 2019
ebf2c1d
fixed sidebar
gtivansan May 22, 2019
16d90aa
fixed bug
gtivansan May 25, 2019
9e60e7e
added css asset
gtivansan May 25, 2019
696a59f
update gitignore
gtivansan May 25, 2019
e06de06
fixed bugs
gtivansan May 25, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -107,4 +107,7 @@ venv.bak/
.idea/

# Database. let it always be empty
*.db
*.db

# CSS assets
all-min.css
7 changes: 6 additions & 1 deletion app/__init__.py
Original file line number Diff line number Diff line change
@@ -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
Expand Down
17 changes: 17 additions & 0 deletions app/css_asset.py
Original file line number Diff line number Diff line change
@@ -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'
)
30 changes: 30 additions & 0 deletions app/help_functions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
from flask import request, render_template, session, redirect, url_for
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()]))
14 changes: 9 additions & 5 deletions app/room_namespace.py
Original file line number Diff line number Diff line change
@@ -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():
Expand All @@ -13,12 +15,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', 'players': ','.join(db.rooms.get(room_id).users)},
broadcast=True, namespace=self.namespace)
emit('update', {'event': 'player_enter_or_leave', 'data':
simple_render_template('rooms/_players_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', 'players': ','.join(db.rooms.get(room_id).users)},
broadcast=True, namespace=self.namespace)
emit('update', {'event': 'player_enter_or_leave', 'data':
simple_render_template('rooms/_players_list.html', room=db.rooms.get(room_id))},
broadcast = True, namespace = self.namespace)
106 changes: 54 additions & 52 deletions app/routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,43 +3,12 @@
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

'''
help functions
'''


def login_required(f):
@wraps(f)
def wrapped(*args, **kwargs):
if session.get('username') is None:
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()]))
import time
import os


@app.route('/')
Expand Down Expand Up @@ -72,12 +41,22 @@ def logout():

@app.route('/profile')
@login_required
def profile():
return simple_render_template('profile/profile.html', form=request.args.get('form'),
result=request.args.get('result'))
def my_profile():
return simple_render_template('profile/profile.html', form = request.args.get('form'), result = request.args.get('result'))

@app.route('/profile/<username>')
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'])
@login_required
def change_login():
if request.method == 'POST':
new_login = request.form.get("new_login")
Expand All @@ -91,6 +70,7 @@ def change_login():


@app.route('/profile/change_password', methods=['POST', 'GET'])
@login_required
def change_password():
if request.method == 'POST':
username = session['username']
Expand All @@ -108,6 +88,7 @@ def change_password():


@app.route('/profile/change_avatar', methods=['POST', 'GET'])
@login_required
def change_avatar():
if request.method == 'POST':
username = session['username']
Expand Down Expand Up @@ -149,8 +130,9 @@ def add_map():
return simple_render_template('add_map.html')


@app.route('/room_list/<page>', methods=['POST', 'GET'])
def room_list(page):
@app.route('/room_list', methods=['POST', 'GET'])
@login_required
def room_list():
if request.method == 'POST':
room_id = request.form.get('join_button')
return redirect(url_for('waiting_room', room_id=room_id))
Expand Down Expand Up @@ -184,49 +166,59 @@ 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/'
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)
imagepath='/static/images/button_images/'
# 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).usernames, 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))

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]:
return redirect(url_for('game_room', room_id=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/<room_id>', methods=['POST', 'GET'])
@login_required
def game_room(room_id):
username = session.get('username')
labyrinth = db.lrm.get_labyrinth(room_id)
Expand Down Expand Up @@ -263,3 +255,13 @@ def game_room(room_id):
return simple_render_template('rooms/game_room.html',
room=db.rooms.get(room_id),
msgs=labyrinth.get_msgs(username))

@app.route('/templates/<template_name>')
def get_template(template_name):
try:
f = open('app/templates/' + template_name, 'r')
data = f.read()
f.close()
return data
except:
return ''
File renamed without changes.
File renamed without changes.
Loading