Private
Public Access
1
0

Compare commits

..

29 Commits

Author SHA1 Message Date
ae8794f564 doc all entities 2018-05-20 21:27:45 +02:00
2f3062bf33 add half-finished work 2018-05-19 19:01:08 +02:00
0e86f7d4aa disable slack api 2017-01-31 10:39:29 +01:00
8851a6d68b composer update && rewrite user authentication page names 2017-01-31 10:39:04 +01:00
94ebe9a428 bugfix ssl module 2017-01-29 18:04:58 +01:00
4a94855be9 add default avatar pic, w/o facebook profile 2017-01-27 16:52:39 +01:00
a8ac13850b add search box to user list 2017-01-26 14:18:34 +01:00
fe5378f69b debug the connections - no disconnect threatment and graphics design 2017-01-24 23:00:51 +01:00
e8691f29bb add es2016-2017 bundle to babel and webpack 2017-01-24 22:59:47 +01:00
fcd490ef4e refactor; separate app.js to 3 files (except step yet) 2017-01-23 14:43:58 +01:00
a3465f6cf9 add new websocket topic - userList - and handle it 2017-01-22 15:21:45 +01:00
a91172ef7a save facebook id to db 2017-01-22 15:19:26 +01:00
0effd8ab8d change session driver to REDIS 2017-01-03 16:11:19 +01:00
e387e21b34 add created, updated field to db && improve graph design 2017-01-03 13:10:43 +01:00
039c29674a cache setup && optimalize for google pagespeed && optimalize all images 2016-12-22 11:49:07 +01:00
ef89f7df09 improve graph design on homepage && add footer and techs && add official pages 2016-12-21 18:46:32 +01:00
4d5a9b978b bugfix mine websocket periodic mysql calling 2016-12-21 16:16:16 +01:00
ccfb621c2b bugfix hwioauth remember me && centralize hwioauth and facebook settings 2016-12-21 16:15:25 +01:00
1e2a231c6c centralize jquery && bugfix mysql auto-termination problem w/ user auth 2016-12-18 19:51:41 +01:00
bcc9671895 release beta4 2016-12-14 15:50:48 +01:00
6d125f2dab gitignore npm debug log 2016-12-11 18:26:23 +01:00
664ef5b424 add english lang everywhere && add snowfall && add centralized version nbr && improve stylesheet && slack integration 2016-12-11 18:25:19 +01:00
68c6a277ba bugfix #30 && random bg in game 2016-12-11 17:43:31 +01:00
875d2d71db add google analytics and facebook scripts && improve url share method w/ fb && enforce https in prod 2016-12-11 15:10:25 +01:00
c0d75e43f3 reg and login buttons on index && remove list method && facebook centralize 2016-12-10 14:43:28 +01:00
6dc59549ef redesign user frontend 2016-12-08 14:35:28 +01:00
aed5eaf3ab mods for performance; one js.min file on prod 2016-11-30 21:24:51 +01:00
f44bc58df2 improve webpack config for prod compile #23 2016-11-30 20:48:17 +01:00
50b3663889 ssl handling #22 && reconnection issues #20, #21 2016-11-30 20:15:56 +01:00
144 changed files with 4399 additions and 1142 deletions

View File

@@ -1,3 +1,3 @@
{ {
"presets": ["es2015", "react"] "presets": ["es2015", "es2016", "es2017", "react"]
} }

3
.gitignore vendored
View File

@@ -35,4 +35,5 @@ phpunit-report/*
/src/Mine/SeekerBundle/Resources/public/js/src/ /src/Mine/SeekerBundle/Resources/public/js/src/
nohup.out nohup.out
src/Mine/SeekerBundle/Resources/public/js/index.js src/Mine/SeekerBundle/Resources/public/js/build/
npm-debug.log

View File

@@ -15,11 +15,26 @@ This is a Symfony 3 project w/ React JS in standalone mode and w/ WebSocket.
1.) Backend WebSocket server start as daemon - GeniusesOfSymfony/WebSocketBundle 1.) Backend WebSocket server start as daemon - GeniusesOfSymfony/WebSocketBundle
$ nohup bin/console gos:websocket:server & $ nohup php bin/console gos:websocket:server --env=prod &
2.) React JS WebPack watch generator w/ babel presets: es2015, react 2.) React JS WebPack watch generator w/ babel presets: es2015, react
$ webpack -p --config=webpack-prod.config.js
PROD
$ webpack --progress --colors --watch -d $ webpack --progress --colors --watch -d
DEV
-d --> Debugger; If you write this line somewhere: debugger; -d --> Debugger; If you write this line somewhere: debugger;
The browser will stop the code here!!! The browser will stop the code here!!!
3.) Connect to Prod
$ ssh xxsvci@laszlolang.com -i ~/.ssh/id_rsa_laszlolang
4.) Stunnel config
$ sudo nano /etc/stunnel/stunnel.conf

View File

@@ -24,6 +24,7 @@ class AppKernel extends Kernel
new Gos\Bundle\PubSubRouterBundle\GosPubSubRouterBundle(), new Gos\Bundle\PubSubRouterBundle\GosPubSubRouterBundle(),
new Doctrine\Bundle\DoctrineCacheBundle\DoctrineCacheBundle(), new Doctrine\Bundle\DoctrineCacheBundle\DoctrineCacheBundle(),
new Snc\RedisBundle\SncRedisBundle(), new Snc\RedisBundle\SncRedisBundle(),
// new CL\Bundle\SlackBundle\CLSlackBundle(),
new Jotunheimr\AdminBundle\JotunheimrAdminBundle(), new Jotunheimr\AdminBundle\JotunheimrAdminBundle(),
new Jotunheimr\UserBundle\JotunheimrUserBundle(), new Jotunheimr\UserBundle\JotunheimrUserBundle(),

View File

@@ -2,12 +2,31 @@
<html> <html>
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta http-equiv="Cache-control" content="max-age=1209600;public">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<title>{% block title %}Welcome!{% endblock %}</title> <meta name="mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="keywords" content="game,mineseeker,mine,seeker,laszlolang.com">
<meta name="robots" content="index,follow">
<meta name="revisit-after" content="2 days">
<meta name="resource-type" content="document">
<meta name="country" content="Hungary">
<meta name="description" content="This is a new minesweeper, multiplayer game.">
<meta name="content-language" content="hu,hun,hungarian">
{% include '@MineSeeker/Recent/favicon.html.twig' %}
<meta property="fb:app_id" content="{{ facebook_api }}">
{% block metas %}{% endblock %}
<title>MineSeeker{% block title %}{% endblock %}</title>
{% block stylesheets %}{% endblock %} {% block stylesheets %}{% endblock %}
<link rel="icon" type="image/x-icon" href="{{ asset('favicon.ico') }}"/> {% include '@MineSeeker/Recent/google-analytics.html.twig' %}
</head> </head>
<body> <body>
<div id="fb-root"></div>
{% block bodyTop %}{% endblock %}
<header> <header>
{% block header %}{% endblock %} {% block header %}{% endblock %}
</header> </header>
@@ -18,6 +37,15 @@
{% block footer %}{% endblock %} {% block footer %}{% endblock %}
</footer> </footer>
{% block javascripts %}{% endblock %} {% block javascripts %}
{% javascripts filter='?uglifyjs2'
'@JotunheimrAdminBundle/Resources/public/js/vendor/plugins/jQuery/jquery-3.0.0.min.js'
'@JotunheimrAdminBundle/Resources/public/js/vendor/plugins/jQuery/jquery-migrate-3.0.0.min.js'
'@JotunheimrAdminBundle/Resources/public/js/vendor/bootstrap/js/bootstrap.min.js' %}
<script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}
{% include '@MineSeeker/Recent/facebook.html.twig' %}
{% endblock %}
</body> </body>
</html> </html>

View File

@@ -10,6 +10,8 @@ imports:
# http://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration # http://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration
parameters: parameters:
locale: en locale: en
fos.email: 7system7@gmail.com
fos.name: system7
framework: framework:
#esi: ~ #esi: ~
@@ -28,10 +30,10 @@ framework:
trusted_hosts: ~ trusted_hosts: ~
trusted_proxies: ~ trusted_proxies: ~
session: session:
# http://symfony.com/doc/current/reference/configuration/framework.html#handler-id # http://symfony.com/doc/current/reference/configuration/framework.html#handler-id
# handler_id: session.handler.native_file # handler_id: session.handler.native_file
# save_path: "%kernel.root_dir%/../var/sessions/%kernel.environment%"
handler_id: session.handler.pdo handler_id: session.handler.pdo
save_path: "%kernel.root_dir%/../var/sessions/%kernel.environment%"
fragments: ~ fragments: ~
http_method_override: true http_method_override: true
assets: ~ assets: ~
@@ -40,6 +42,11 @@ framework:
twig: twig:
debug: "%kernel.debug%" debug: "%kernel.debug%"
strict_variables: "%kernel.debug%" strict_variables: "%kernel.debug%"
globals:
version: "0.42.21 (beta8)"
facebook_api: "%facebook.api%"
facebook_scope: "%facebook.scope%"
facebook_api_version: "%facebook.version%"
# Doctrine Configuration # Doctrine Configuration
doctrine: doctrine:
@@ -68,6 +75,7 @@ assetic:
debug: "%kernel.debug%" debug: "%kernel.debug%"
use_controller: "%kernel.debug%" use_controller: "%kernel.debug%"
bundles: ~ bundles: ~
node: /usr/bin/nodejs
filters: filters:
cssrewrite: ~ cssrewrite: ~
uglifyjs2: uglifyjs2:
@@ -79,5 +87,26 @@ assetic:
# FOS User Configuration # FOS User Configuration
fos_user: fos_user:
db_driver: orm # other valid values are 'mongodb', 'couchdb' and 'propel' db_driver: orm # other valid values are 'mongodb', 'couchdb' and 'propel'
firewall_name: main firewall_name: secured_area
user_class: Jotunheimr\UserBundle\Entity\User user_class: Jotunheimr\UserBundle\Entity\User
from_email:
address: "%fos.email%"
sender_name: "%fos.name%"
# Facebook OAuth
hwi_oauth:
firewall_names: [secured_area]
resource_owners:
facebook:
type: facebook
client_id: "%facebook.api%"
client_secret: "%facebook.api-secret%"
scope: "%facebook.scope%"
options:
display: popup
auth_type: rerequest
csrf: true
# Slack integration
#cl_slack:
# api_token: xoxp-107639806167-107029084564-115427085733-cccaa4f96c89c87ce680c7f22acfd001

View File

@@ -32,16 +32,9 @@ monolog:
type: console type: console
channels: [!event, !doctrine] channels: [!event, !doctrine]
# Facebook OAuth parameters:
hwi_oauth: facebook.api: 320599508311862
firewall_names: [secured_area] facebook.api-secret: 18d4f48cdd274bccee2678e5eff3f557
resource_owners: facebook.version: 'v2.8'
facebook: facebook.scope: 'public_profile,email,user_friends'
type: facebook mineseeker.websocket: 6450
client_id: 320599508311862
client_secret: 18d4f48cdd274bccee2678e5eff3f557
scope: "public_profile,email"
options:
display: popup
auth_type: rerequest
csrf: true

View File

@@ -23,16 +23,9 @@ monolog:
console: console:
type: console type: console
# Facebook OAuth parameters:
hwi_oauth: facebook.api: 320597498312063
firewall_names: [secured_area] facebook.api-secret: c751bec8a3c5313ff2e5a83769bf1109
resource_owners: facebook.version: 'v2.8'
facebook: facebook.scope: 'public_profile,email,user_friends'
type: facebook mineseeker.websocket: 8080
client_id: 320597498312063
client_secret: c751bec8a3c5313ff2e5a83769bf1109
scope: "public_profile,email"
options:
display: popup
auth_type: rerequest
csrf: true

View File

@@ -2,9 +2,12 @@
parameters: parameters:
database_host: 127.0.0.1 database_host: 127.0.0.1
database_port: null database_port: null
database_name: xxsvci_mineseeker # database_name: xxsvci_mineseeker
database_user: xxsvci_mine # database_user: xxsvci_mine
database_password: "XTw#8qC$faa*" # database_password: "XTw#8qC$faa*"
database_name: mine
database_user: root
database_password: "bazmeg"
mailer_transport: smtp mailer_transport: smtp
mailer_host: 127.0.0.1 mailer_host: 127.0.0.1
mailer_user: null mailer_user: null

View File

@@ -12,3 +12,4 @@ _errors:
_main: _main:
resource: routing.yml resource: routing.yml
schemes: [http]

View File

@@ -21,13 +21,19 @@ security:
login_path: /login login_path: /login
failure_path: /login failure_path: /login
use_forward: false use_forward: false
oauth_user_provider: oauth_user_provider:
service: my.custom.user_provider service: jotun.user_provider
remember_me:
secret: "%secret%"
lifetime: 604800
path: /
domain: ~
user_provider: fos_userbundle
form_login: form_login:
provider: fos_userbundle provider: fos_userbundle
csrf_token_generator: security.csrf.token_manager csrf_token_generator: security.csrf.token_manager
default_target_path: / default_target_path: /
remember_me: true
logout: logout:
path: /logout path: /logout
target: / target: /

View File

@@ -34,7 +34,9 @@
"symfony/assetic-bundle": "^2.8", "symfony/assetic-bundle": "^2.8",
"predis/predis": "^1.0", "predis/predis": "^1.0",
"snc/redis-bundle": "^2.0", "snc/redis-bundle": "^2.0",
"hwi/oauth-bundle": "^0.5.1" "hwi/oauth-bundle": "^0.5.1",
"cleentfaar/slack-bundle": "^0.20.1",
"symfony/translation": "^3.2"
}, },
"require-dev": { "require-dev": {
"sensio/generator-bundle": "^3.0", "sensio/generator-bundle": "^3.0",

1356
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -1 +0,0 @@
src/Mine/SeekerBundle/Resources/public/js/node

View File

@@ -9,6 +9,8 @@
"babel-core": "^6.14.0", "babel-core": "^6.14.0",
"babel-loader": "^6.2.5", "babel-loader": "^6.2.5",
"babel-preset-es2015": "^6.14.0", "babel-preset-es2015": "^6.14.0",
"babel-preset-es2016": "^6.22.0",
"babel-preset-es2017": "^6.22.0",
"babel-preset-react": "^6.11.1", "babel-preset-react": "^6.11.1",
"howler": "^2.0.1", "howler": "^2.0.1",
"js-base64": "^2.1.9", "js-base64": "^2.1.9",
@@ -33,6 +35,6 @@
"multiplayer", "multiplayer",
"websocket" "websocket"
], ],
"author": "Laszlo Lang <system7>", "author": "Laszlo Lang <system7> www.laszlolang.com",
"license": "ISC" "license": "ISC"
} }

View File

@@ -26,6 +26,9 @@ class User extends BaseUser
*/ */
private $facebookId; private $facebookId;
/**
* @ORM\Column(name="facebook_access_token", type="string", length=255, nullable=true)
*/
private $facebookAccessToken; private $facebookAccessToken;
/** /**

View File

@@ -9,9 +9,12 @@ hwi_oauth_login:
facebook_login: facebook_login:
path: /login/check-facebook path: /login/check-facebook
defaults: { _remember_me: on }
google_login: google_login:
path: /login/check-google path: /login/check-google
defaults: { _remember_me: on }
github_login: github_login:
path: /login/check-github path: /login/check-github
defaults: { _remember_me: on }

View File

@@ -1,4 +1,4 @@
services: services:
my.custom.user_provider: jotun.user_provider:
class: Jotunheimr\UserBundle\Security\Core\User\MyFOSUBUserProvider class: Jotunheimr\UserBundle\Security\Core\User\MyFOSUBUserProvider
arguments: ['@fos_user.user_manager', { facebook: facebookId }, '@doctrine.orm.entity_manager'] arguments: ['@fos_user.user_manager', { facebook: facebookId }, '@doctrine.orm.entity_manager']

View File

@@ -28,109 +28,368 @@
box-sizing: border-box; box-sizing: border-box;
} }
main { .ac-custom {
background: url('/bundles/mineseeker/images/homepage/header.jpg') no-repeat center center;
background-size: cover;
position: fixed;
width: 100%; width: 100%;
height: 100%;
} }
main .wrapper { header section .form-check {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
height: 100%;
}
main .wrapper .form-container {
background: #ffffff;
display: table; display: table;
padding: 15px; position: relative;
}
main .wrapper .form-container h1 {
font: normal 32px Arial, Helvetica, sans-serif;
text-align: center;
padding: 0;
margin: 0 0 15px 0;
}
main .wrapper .form-container h1.sub-title {
margin-top: 15px;
}
main .wrapper .form-container h2 {
font: normal 18px Arial, Helvetica, sans-serif;
text-align: center;
margin: 20px 0; margin: 20px 0;
} }
main .wrapper .form-container .form-input { header section h1 {
background: #cbcbc8; margin: 10px 0;
min-width: 300px; }
border: 0;
padding: 15px;
header section .input-submit button,
header section .input-submit button:hover,
header section .form-input,
header section .form-input:focus,
header section .form-input:hover {
-webkit-transition: all 250ms ease-in-out; -webkit-transition: all 250ms ease-in-out;
-moz-transition: all 250ms ease-in-out;
-o-transition: all 250ms ease-in-out;
transition: all 250ms ease-in-out; transition: all 250ms ease-in-out;
} }
main .wrapper .form-container .form-input:focus { header section .input-submit button {
background: #e2e2de; background: #83aed9;
-webkit-transition: all 250ms ease-in-out;
transition: all 250ms ease-in-out;
}
main .wrapper .form-container .form-input.form-username {
margin-bottom: 5px;
}
main .wrapper .form-container .form-check {
display: table; display: table;
position: relative; font: bold 32px 'Rajdhani', sans-serif;
margin: 20px auto 0 auto; text-transform: uppercase;
} text-decoration: none;
width: 500px;
main .wrapper .form-container .input-submit { border: 1px solid #658fb8;
color: #FFFFFF;
padding: 25px 150px;
margin-top: 20px; margin-top: 20px;
-webkit-box-shadow: 0 3px 10px rgba(0, 0, 0, 0.3);
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.3);
-webkit-border-radius: 3px;
border-radius: 3px;
} }
main .wrapper .form-container button, header section .input-submit button:hover {
main .wrapper .form-container .fb-login { background: #86b5e1;
-webkit-box-shadow: 0 7px 15px rgba(0, 0, 0, 0.2);
box-shadow: 0 7px 15px rgba(0, 0, 0, 0.2);
}
header section .form-input {
display: block; display: block;
background: #7dadcf; width: 500px;
font: bold 22px 'Rajdhani', sans-serif;
border: 1px solid #dddddd;
color: #000000;
padding: 15px;
margin-bottom: 10px;
-webkit-border-radius: 3px;
border-radius: 3px;
-webkit-box-shadow: 0 3px 5px rgba(0, 0, 0, 0.15);
box-shadow: 0 3px 5px rgba(0, 0, 0, 0.15);
}
header section .form-input:focus,
header section .form-input:hover {
-webkit-box-shadow: 0 7px 10px rgba(0, 0, 0, 0.1);
box-shadow: 0 7px 10px rgba(0, 0, 0, 0.1);
}
header section .failure {
background: #f00;
position: relative;
border: 3px solid #fff;
font: bold 16px 'Rajdhani', sans-serif;
color: #FFFFFF;
padding: 10px;
margin: 30px 0 10px 0;
-webkit-border-radius: 5px;
border-radius: 5px;
}
header section .failure:after,
header section .failure:before {
content: " ";
position: absolute;
bottom: 100%;
left: 50px;
height: 0;
width: 0;
border: solid transparent;
pointer-events: none;
}
header section .failure:after {
border-color: rgba(0, 0, 0, 0);
border-bottom-color: #f00;
border-width: 20px;
margin-left: -20px;
}
header section .failure:before {
border-color: rgba(255, 255, 255, 0);
border-bottom-color: #ffffff;
border-width: 26px;
margin-left: -26px;
}
header section .failure ul {
display: inline-block;
list-style: none;
padding: 0;
margin: 0 10px 0 0;
}
header section h3.or {
font: bold 16px 'Rajdhani', sans-serif;
text-transform: uppercase;
color: #a1a1a1;
margin: 20px 0;
}
header section #id_welcome {
display: flex;
flex-direction: row;
margin-bottom: 115px;
}
header section #id_welcome > div {
padding-right: 20px;
}
header section #id_welcome img {
width: 100px;
border: 5px solid #414040;
-webkit-border-radius: 50%;
border-radius: 50%;
}
header section .buttons,
header section form {
z-index: 2;
}
header section div.buttons > a.fb-login,
header section div.buttons > a.slack-login {
position: relative;
display: block;
width: 500px;
height: 93px;
padding: 25px 0 25px 150px;
margin-bottom: 10px;
overflow: hidden;
cursor: pointer;
-webkit-border-radius: 3px;
border-radius: 3px;
-webkit-box-shadow: 0 3px 5px rgba(0, 0, 0, 0.15);
box-shadow: 0 3px 5px rgba(0, 0, 0, 0.15);
}
header section div.buttons > a.fb-login:hover,
header section div.buttons > a.slack-login:hover {
text-decoration: none;
-webkit-box-shadow: 0 7px 10px rgba(0, 0, 0, 0.1);
box-shadow: 0 7px 10px rgba(0, 0, 0, 0.1);
}
header section div.buttons > a.fb-login i,
header section div.buttons > a.slack-login i {
position: absolute;
font-size: 130px;
top: 0;
left: 15px;
}
header section div.buttons > a.fb-login {
background: #5975b1;
border: 1px solid #50649f;
}
header section div.buttons > a.fb-login:hover {
background: #42598c;
color: #FFFFFF;
}
header section div.buttons > a.slack-login {
background: #FFFFFF;
border: 1px solid #5c3a58;
color: #5c3a58;
}
header section div.buttons > a.slack-login:hover {
background: #e6e6e6;
color: #5c3a58;
}
header section .failure-main {
background: #f00;
max-width: 500px;
border: 3px solid #fff;
font: bold 16px 'Rajdhani', sans-serif;
color: #FFFFFF;
padding: 10px;
margin: 0 0 20px 0;
-webkit-border-radius: 5px;
border-radius: 5px;
}
main div.txt {
width: 100%; width: 100%;
border: 0; max-width: 1000px;
font-family: 'Rajdhani', sans-serif;
color: #414040;
margin: 50px auto 0 auto;
}
main .txt h1 {
font-weight: bold;
text-align: center; text-align: center;
padding: 20px;
-webkit-transition: all 250ms ease-in-out;
transition: all 250ms ease-in-out;
} }
main .wrapper .form-container .fb-login { main div.txt h2 {
background: #3b5998; margin: 0 0 50px 0;
} }
main .wrapper .form-container button:focus, main div.txt p {
main .wrapper .form-container button:hover, font: normal 16px 'Rajdhani', sans-serif;
main .wrapper .form-container .fb-login:focus,
main .wrapper .form-container .fb-login:hover {
background: #6fa0c3;
-webkit-transition: all 250ms ease-in-out;
transition: all 250ms ease-in-out;
} }
main .wrapper .form-container button i, main div.txt li {
main .wrapper .form-container .fb-login i { font: normal 16px 'Rajdhani', sans-serif;
font-size: 32px; padding-left: 10px;
font-weight: bolder; margin-left: 50px;
color: #ffffff;
} }
main .technologies {
text-align: center;
}
main .technologies img {
display: inline-block;
width: 90%;
max-width: 100px;
margin: 20px;
}
footer {
background: #414040;
width: 100%;
min-height: 50px;
margin-top: 50px;
}
footer nav {
display: block;
text-align: center;
}
footer nav ul {
display: inline-block;
list-style: none;
padding: 0;
margin: 0;
}
footer nav ul li {
display: inline-block;
font: bold 16px 'Rajdhani', sans-serif;
color: #FFFFFF;
}
footer nav ul li:nth-child(even) {
width: 50px;
text-align: center;
}
footer nav ul li a {
text-align: center;
line-height: 50px;
color: #FFFFFF;
}
footer nav ul li a:hover {
color: #FFFFFF;
}
@media screen and (max-width: 1200px) {
header section #id_welcome {
align-items: center;
justify-content: center;
margin-top: 50px;
}
header section .form-input,
header section .form-check {
margin-left: auto;
margin-right: auto;
}
header section .input-submit button {
margin: 0 auto;
}
header section > div {
width: 100%;
}
header section div.buttons > a.fb-login,
header section div.buttons > a.slack-login {
margin: 0 auto;
}
main div.txt {
padding: 0 20px;
}
}
@media screen and (max-width: 550px) {
header section #id_welcome {
display: block;
}
header section {
padding: 20px;
}
header section .form-input {
width: 100%;
margin-left: auto;
margin-right: auto;
}
header section .form-check {
margin: 20px auto;
}
header section .input-submit button {
width: 100%;
}
header section div.buttons > a.fb-login,
header section div.buttons > a.slack-login {
width: 100%;
}
header section div.buttons > a.fb-login span,
header section div.buttons > a.slack-login span {
display: none;
}
footer nav ul li {
display: block;
}
footer nav ul li:nth-child(even) {
display: none;
}
}

View File

@@ -2,52 +2,114 @@
{% trans_default_domain 'FOSUserBundle' %} {% trans_default_domain 'FOSUserBundle' %}
{% block title %} - Registration{% endblock %}
{% block fos_user_content %} {% block fos_user_content %}
<div class="wrapper"> <section class="header-content">
<div class="form-container"> <div class="logo">
<h1> Sign up </h1> <a href="{{ path('MineSeekerBundle_homepage') }}" target="_self">
<div class="db"> <img src="{{ asset('bundles/mineseeker/images/mine-logo-txt.png') }}" alt="MineSeeker Logo w/ Txt"
<form action="{{ path('fos_user_registration_register') }}" border="0"/>
method="post"> </a>
<div> </div>
{{ form_widget(form.email, {'attr': {'placeholder': 'Email', 'class': 'form-input form-username'}}) }} <h1> Registration </h1>
{{ form_errors(form.email) }} <div class="db">
</div> <form action="{{ path('fos_user_registration_register') }}"
method="post">
{{ form_widget(form._token) }}
<div> {% if form_errors(form) is not empty %}
{{ form_widget(form.username, {'attr': {'placeholder': 'Username ', 'class': 'form-input form-username'}}) }} <div class="failure-main">
{{ form_errors(form.username) }} <i class="fa fa-exclamation-circle"></i> {{ form_errors(form) }}
</div> </div>
{% endif %}
<div> <div>
{{ form_widget(form.plainPassword.first, {'attr': {'placeholder': 'Password', 'class': 'form-input form-username'}}) }} {{ form_widget(form.email, {'attr': {'placeholder': 'Email', 'class': 'form-input form-username'}}) }}
{{ form_errors(form.plainPassword.first) }} {% if form_errors(form.email) is not empty %}
</div> <div class="failure">
<i class="fa fa-exclamation-circle"></i> {{ form_errors(form.email) }}
</div>
{% endif %}
</div>
<div> <div>
{{ form_widget(form.plainPassword.second, {'attr': {'placeholder': 'Repeat password', 'class': 'form-input'}}) }} {{ form_widget(form.username, {'attr': {'placeholder': 'Username ', 'class': 'form-input form-username'}}) }}
{{ form_errors(form.plainPassword.second) }} {% if form_errors(form.username) is not empty %}
</div> <div class="failure">
<i class="fa fa-exclamation-circle"></i> {{ form_errors(form.username) }}
</div>
{% endif %}
</div>
<div class="input-submit"> <div>
<button type="submit" id="_submit" name="_submit"> {{ form_widget(form.plainPassword.first, {'attr': {'placeholder': 'Password', 'class': 'form-input form-username'}}) }}
<i class="fa fa-check"></i> {% if form_errors(form.plainPassword.first) is not empty %}
</button> <div class="failure">
</div> <i class="fa fa-exclamation-circle"></i> {{ form_errors(form.plainPassword.first) }}
</form> </div>
</div> {% endif %}
<h2><u><b>or</b></u> enter w/ your Facebook's e-mail</h2> </div>
<div class="fb">
{% include('@JotunheimrUser/Social/facebook.html.twig') %} <div>
</div> {{ form_widget(form.plainPassword.second, {'attr': {'placeholder': 'Repeat password', 'class': 'form-input'}}) }}
{% if form_errors(form.plainPassword.second) is not empty %}
<div class="failure">
<i class="fa fa-exclamation-circle"></i> {{ form_errors(form.plainPassword.second) }}
</div>
{% endif %}
</div>
<div class="input-submit">
<button type="submit" id="_submit" name="_submit">
<i class="fa fa-check"></i>
</button>
</div>
</form>
</div>
<h3 class="or">or login <u>w/ one click</u></h3>
<div class="buttons">
{% include('@JotunheimrUser/Social/facebook.html.twig') %}
{#<a class="slack-login"#}
{#href="https://slack.com/oauth/authorize?scope=identity.basic,identity.email,identity.team,identity.avatar&client_id=107639806167.106953365090&redirect_uri=http://mine.dev">#}
{#<i class="fa fa-slack"></i><span>w/ Slack</span>#}
{#</a>#}
</div>
<img src="{{ asset('bundles/mineseeker/images/mine-logo-logo.png') }}" alt="MineSeeker Logo" border="0"/>
</section>
{% endblock fos_user_content %}
{% block body %}
<div class="txt">
<div class="technologies">
<h1>Used technologies</h1>
<img src="{{ asset('bundles/mineseeker/images/technologies/websocket.png') }}" alt="Used Websocket" border="0"/>
<img src="{{ asset('bundles/mineseeker/images/technologies/react.png') }}" alt="Used React.js" border="0"/>
<img src="{{ asset('bundles/mineseeker/images/technologies/symfony.png') }}" alt="Used Symfony" border="0"/>
<img src="{{ asset('bundles/mineseeker/images/technologies/jquery.png') }}" alt="Used jQuery" border="0"/>
<img src="{{ asset('bundles/mineseeker/images/technologies/lets-encrypt.png') }}" alt="Used Let's Encrypt" border="0"/>
</div> </div>
</div> </div>
{% endblock fos_user_content %} {% endblock %}
{% block footer %}
<nav>
<ul>
<li><a href="{{ path('MineSeekerBundle_homepage') }}">Homepage</a></li>
<li>&middot;</li>
<li><a href="{{ path('MineSeekerBundle_terms') }}">Terms of Use</a></li>
<li>&middot;</li>
<li><a href="{{ path('MineSeekerBundle_privacy') }}">Privacy Policy</a></li>
<li>&middot;</li>
<li><a href="{{ path('MineSeekerBundle_contact') }}">Contact</a></li>
</ul>
</nav>
{% endblock %}
{% block javascripts %} {% block javascripts %}
{{ parent() }} {{ parent() }}
{% javascripts {% javascripts filter='?uglifyjs2'
'@JotunheimrUserBundle/Resources/public/js/register.js' %} '@JotunheimrUserBundle/Resources/public/js/register.js' %}
<script type="text/javascript" src="{{ asset_url }}"></script> <script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %} {% endjavascripts %}
@@ -56,7 +118,7 @@
{% block stylesheets %} {% block stylesheets %}
{{ parent() }} {{ parent() }}
{% stylesheets filter='cssrewrite' {% stylesheets filter='?uglifycss'
'@JotunheimrUserBundle/Resources/public/css/font-awesome/css/font-awesome.min.css' '@JotunheimrUserBundle/Resources/public/css/font-awesome/css/font-awesome.min.css'
'@JotunheimrUserBundle/Resources/public/css/layout.css' %} '@JotunheimrUserBundle/Resources/public/css/layout.css' %}
<link rel="stylesheet" media="screen" href="{{ asset_url }}"/> <link rel="stylesheet" media="screen" href="{{ asset_url }}"/>

View File

@@ -2,55 +2,96 @@
{% trans_default_domain 'FOSUserBundle' %} {% trans_default_domain 'FOSUserBundle' %}
{% block title %} - Login{% endblock %}
{% block fos_user_content %} {% block fos_user_content %}
{% if error %} {% if error %}
{{ error.messageKey|trans(error.messageData, 'security') }} {{ error.messageKey|trans(error.messageData, 'security') }}
{% endif %} {% endif %}
<div class="wrapper"> <section class="header-content">
<div class="form-container"> <div class="logo">
<h1>Sign in</h1> <a href="{{ path('MineSeekerBundle_homepage') }}" target="_self">
<div class="db"> <img src="{{ asset('bundles/mineseeker/images/mine-logo-txt.png') }}" alt="MineSeeker Logo w/ Txt"
<form action="{{ path("fos_user_security_check") }}" method="post" border="0"/>
class="ac-custom ac-checkbox ac-boxfill"> </a>
<input type="hidden" name="_csrf_token" value="{{ csrf_token }}"/> </div>
<h1>Login</h1>
<form action="{{ path("fos_user_security_check") }}" method="post"
class="ac-custom ac-checkbox ac-boxfill">
<div> {% if csrf_token %}
<input type="text" id="username" name="_username" value="{{ last_username }}" <input type="hidden" name="_csrf_token" value="{{ csrf_token }}"/>
class="form-input form-username" {% endif %}
placeholder="Username or Email"/>
</div>
<div> {% if error %}
<input type="password" id="password" name="_password" <div class="failure-main">
class="form-input" <i class="fa fa-exclamation-circle"></i> <strong>Login error!</strong> {{ error.messageKey|trans({}, 'messages') }}
placeholder="Password"/> </div>
</div> {% endif %}
<div class="form-check"> <input type="text" id="username" name="_username" value="{{ last_username }}"
<input type="checkbox" id="remember-me" name="_remember_me" value="on"/> class="form-input form-username"
<label for="remember-me">{{ 'security.login.remember_me'|trans }}</label> placeholder="Username or Email" autofocus />
</div>
<div class="input-submit"> <input type="password" id="password" name="_password"
<button type="submit" id="_submit" name="_submit"> class="form-input"
<i class="fa fa-check"></i> placeholder="Password"/>
</button>
</div> <div class="form-check">
</form> <input type="checkbox" id="remember-me" name="_remember_me" value="on"/>
<label for="remember-me">{{ 'security.login.remember_me'|trans }}</label>
</div> </div>
<h2><u><b>or</b></u> enter w/ your Facebook's e-mail</h2>
<div class="fb"> <div class="input-submit">
{% include('@JotunheimrUser/Social/facebook.html.twig') %} <button type="submit" id="_submit" name="_submit">
<i class="fa fa-check"></i>
</button>
</div> </div>
</form>
<h3 class="or">or login <u>w/ one click</u></h3>
<div class="buttons">
{% include('@JotunheimrUser/Social/facebook.html.twig') %}
{#<a class="slack-login"#}
{#href="https://slack.com/oauth/authorize?scope=identity.basic,identity.email,identity.team,identity.avatar&client_id=107639806167.106953365090&redirect_uri=http://mine.dev">#}
{#<i class="fa fa-slack"></i><span>w/ Slack</span>#}
{#</a>#}
</div>
<img src="{{ asset('bundles/mineseeker/images/mine-logo-logo.png') }}" alt="MineSeeker Logo" border="0"/>
</section>
{% endblock fos_user_content %}
{% block body %}
<div class="txt">
<div class="technologies">
<h1>Used technologies</h1>
<img src="{{ asset('bundles/mineseeker/images/technologies/websocket.png') }}" alt="Used Websocket" border="0"/>
<img src="{{ asset('bundles/mineseeker/images/technologies/react.png') }}" alt="Used React.js" border="0"/>
<img src="{{ asset('bundles/mineseeker/images/technologies/symfony.png') }}" alt="Used Symfony" border="0"/>
<img src="{{ asset('bundles/mineseeker/images/technologies/jquery.png') }}" alt="Used jQuery" border="0"/>
<img src="{{ asset('bundles/mineseeker/images/technologies/lets-encrypt.png') }}" alt="Used Let's Encrypt" border="0"/>
</div> </div>
</div> </div>
{% endblock fos_user_content %} {% endblock %}
{% block footer %}
<nav>
<ul>
<li><a href="{{ path('MineSeekerBundle_homepage') }}">Homepage</a></li>
<li>&middot;</li>
<li><a href="{{ path('MineSeekerBundle_terms') }}">Terms of Use</a></li>
<li>&middot;</li>
<li><a href="{{ path('MineSeekerBundle_privacy') }}">Privacy Policy</a></li>
<li>&middot;</li>
<li><a href="{{ path('MineSeekerBundle_contact') }}">Contact</a></li>
</ul>
</nav>
{% endblock %}
{% block javascripts %} {% block javascripts %}
{{ parent() }} {{ parent() }}
{% javascripts {% javascripts filter='?uglifyjs2'
'@JotunheimrUserBundle/Resources/public/js/register.js' '@JotunheimrUserBundle/Resources/public/js/register.js'
'@JotunheimrUserBundle/Resources/public/js/svgcheckbox.js' %} '@JotunheimrUserBundle/Resources/public/js/svgcheckbox.js' %}
<script type="text/javascript" src="{{ asset_url }}"></script> <script type="text/javascript" src="{{ asset_url }}"></script>
@@ -60,7 +101,7 @@
{% block stylesheets %} {% block stylesheets %}
{{ parent() }} {{ parent() }}
{% stylesheets filter='cssrewrite' {% stylesheets filter='?uglifycss'
'@JotunheimrUserBundle/Resources/public/css/font-awesome/css/font-awesome.min.css' '@JotunheimrUserBundle/Resources/public/css/font-awesome/css/font-awesome.min.css'
'@JotunheimrUserBundle/Resources/public/css/svgcheckbox.css' %} '@JotunheimrUserBundle/Resources/public/css/svgcheckbox.css' %}
<link rel="stylesheet" media="screen" href="{{ asset_url }}"/> <link rel="stylesheet" media="screen" href="{{ asset_url }}"/>

View File

@@ -1,36 +1,3 @@
<script> <a id="fbLogin" class="fb-login">
window.fbAsyncInit = function () { <i class="fa fa-facebook"></i><span>w/ Facebook</span>
FB.init({ </a>
appId: '320599508311862',
xfbml: true,
version: 'v2.8'
});
};
(function (d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {
return;
}
js = d.createElement(s);
js.id = id;
js.src = "//connect.facebook.net/en_US/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
function fbLogin() {
FB.getLoginStatus(function (response) {
if (response.status === 'connected') {
document.location = "{{ url("hwi_oauth_service_redirect", {service: "facebook"}) }}";
} else {
FB.login(function (response) {
if (response.authResponse) {
document.location = "{{ url("hwi_oauth_service_redirect", {service: "facebook"}) }}";
}
}, {scope: 'email'});
}
});
}
</script>
<a class="fb-login" href="#" onclick="fbLogin();"><i class="fa fa-facebook"></i></a>

View File

@@ -1,53 +1,58 @@
<!doctype html> {% extends '::base.html.twig' %}
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>{% block title %}{{ project_name }} Admin - Login{% endblock %}</title>
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
{% block stylesheets %}
{% stylesheets filter='cssrewrite'
'@JotunheimrUserBundle/Resources/public/css/layout.css'
'@JotunheimrAdminBundle/Resources/public/js/vendor/bootstrap/css/bootstrap.min.css' %}
<link rel="stylesheet" media="screen" href="{{ asset_url }}"/>
{% endstylesheets %}
{% endblock %}
<link rel="icon" type="image/x-icon" href="{{ asset('favicon.ico') }}"/>
<link href="https://fonts.googleapis.com/css?family=Gloria+Hallelujah" rel="stylesheet">
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body> {% block stylesheets %}
{{ parent() }}
{% if app.request.hasPreviousSession %} {% stylesheets filter='?uglifycss'
{% for type, messages in app.session.flashbag.all() %} '@JotunheimrAdminBundle/Resources/public/js/vendor/bootstrap/css/bootstrap.min.css'
{% for message in messages %} '@MineSeekerBundle/Resources/public/css/style.homepage.css'
<div class="flash-{{ type }}"> '@JotunheimrUserBundle/Resources/public/css/layout.css' %}
{{ message }} <link rel="stylesheet" media="screen" href="{{ asset_url }}"/>
</div> {% endstylesheets %}
{% endfor %}
{% endfor %}
{% endif %}
<main> <link href="https://fonts.googleapis.com/css?family=Rajdhani:300,400,500,600,700&amp;subset=latin-ext"
{% block fos_user_content %}{% endblock fos_user_content %} rel="stylesheet">
<canvas id="demo-canvas"></canvas>
</main>
{% block javascripts %}
{% javascripts
'@JotunheimrAdminBundle/Resources/public/js/vendor/plugins/jQuery/jquery-3.0.0.min.js'
'@JotunheimrAdminBundle/Resources/public/js/vendor/plugins/jQuery/jquery-migrate-3.0.0.min.js'
'@JotunheimrAdminBundle/Resources/public/js/vendor/bootstrap/js/bootstrap.min.js'
'@JotunheimrUserBundle/Resources/public/js/circle.js' %}
<script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}
{% endblock %} {% endblock %}
</body> {% block bodyTop %}
</html> {% if app.request.hasPreviousSession %}
{% for type, messages in app.session.flashbag.all() %}
{% for message in messages %}
<div class="flash-{{ type }}">
{{ message }}
</div>
{% endfor %}
{% endfor %}
{% endif %}
{% endblock %}
{% block header %}
{% block fos_user_content %}{% endblock fos_user_content %}
{% endblock %}
{% block javascripts %}
{{ parent() }}
<script src="https://cdnjs.cloudflare.com/ajax/libs/JQuery-Snowfall/1.7.4/snowfall.jquery.min.js"
type="text/javascript"></script>
<script type="text/javascript">
$(function () {
$(document).snowfall({deviceorientation: true, round: true, minSize: 5, maxSize: 8});
$('#fbLogin').length && $('#fbLogin').on('click', function () {
FB.getLoginStatus(function (response) {
if (response.status === 'connected') {
document.location = "{{ url("hwi_oauth_service_redirect", {service: "facebook"}) }}";
} else {
FB.login(function (response) {
if (response.authResponse) {
document.location = "{{ url("hwi_oauth_service_redirect", {service: "facebook"}) }}";
}
}, {scope: '{{ facebook_scope }}'});
}
});
});
});
</script>
{% endblock %}

View File

@@ -72,10 +72,11 @@ class MyFOSUBUserProvider extends BaseFOSUBProvider
} }
$user->setFacebookId($response->getUsername()); $user->setFacebookId($response->getUsername());
$user->setFacebookAccessToken($response->getAccessToken());
$user->setEmail($response->getEmail()); $user->setEmail($response->getEmail());
$user->setEmailCanonical($response->getEmail()); $user->setEmailCanonical($response->getEmail());
$user->setUsername($this->slugify($response->getRealName())); $user->setUsername($this->slug($response->getRealName()));
$user->setUsernameCanonical($this->slugify($response->getRealName())); $user->setUsernameCanonical($this->slug($response->getRealName()));
$user->setRealName($response->getRealName()); $user->setRealName($response->getRealName());
$user->setNickName($response->getNickname()); $user->setNickName($response->getNickname());
if ($empty) { if ($empty) {
@@ -88,25 +89,11 @@ class MyFOSUBUserProvider extends BaseFOSUBProvider
} }
/** /**
* @param $text * @param $string
* @return mixed|string * @return string
*/ */
private function slugify($text) private function slug($string)
{ {
$text = preg_replace('#[^\\pL\d]+#u', '-', $text); return strtolower(trim(preg_replace('~[^0-9a-z]+~i', '-', html_entity_decode(preg_replace('~&([a-z]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i', '$1', htmlentities($string, ENT_QUOTES, 'UTF-8')), ENT_QUOTES, 'UTF-8')), '-'));
$text = trim($text, '-');
if (function_exists('iconv')) {
$text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);
}
$text = strtolower($text);
$text = preg_replace('#[^-\w]+#', '', $text);
if (empty($text)) {
return 'n-a';
}
return $text;
} }
} }

View File

@@ -3,23 +3,83 @@
namespace Mine\SeekerBundle\Controller; namespace Mine\SeekerBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
/**
* Class GameController
*
* @package Mine\SeekerBundle\Controller
* @author system7 <https://www.laszlolang.com>
*/
class GameController extends Controller class GameController extends Controller
{ {
public function indexAction() public function indexAction(Request $request)
{ {
return $this->render('MineSeekerBundle:Game:index.html.twig'); // $apiClient = new ApiClient('xoxp-107639806167-107029084564-115427085733-cccaa4f96c89c87ce680c7f22acfd001');
} //
// $usersListPayload = new UsersListPayload();
// $usersList = $apiClient->send($usersListPayload);
//
// dump($usersList);
//
// $payload = new ChatPostMessagePayload();
// $payload->setChannel('#general');
// $payload->setAsUser(true);
// $payload->setText('Hello world!');
public function playAction() // $response = $apiClient->send($payload);
{
return $this->render('MineSeekerBundle:Game:play.html.twig', array( // if ($response->isOk()) {
'env' => $this->container->getParameter('kernel.environment') // dump('bazmeg');
// } else {
// dump($response->getError());
// dump($response->getErrorExplanation());
// }
return $this->render('MineSeekerBundle:Game:index.html.twig', array(
'env' => $this->container->getParameter('kernel.environment'),
'ssl' => $request->isSecure() ? 'true' : 'false',
)); ));
} }
public function listAction() public function playAction(Request $request)
{ {
return $this->render('MineSeekerBundle:Game:list.html.twig'); return $this->render('MineSeekerBundle:Game:play.html.twig', array(
'env' => $this->container->getParameter('kernel.environment'),
'ssl' => $request->isSecure() ? 'true' : 'false',
));
}
public function rePlayAction(Request $request)
{
return $this->render('MineSeekerBundle:Game:play.html.twig', array(
'env' => $this->container->getParameter('kernel.environment'),
'ssl' => $request->isSecure() ? 'true' : 'false',
));
}
public function slackAction(Request $request)
{
}
public function privacyAction()
{
return $this->render('MineSeekerBundle:Official:privacy.html.twig');
}
public function termsAction()
{
return $this->render('MineSeekerBundle:Official:terms.html.twig');
}
public function contactAction()
{
return $this->render('MineSeekerBundle:Official:contact.html.twig');
}
public function landingAction()
{
return $this->render('MineSeekerBundle:Official:landing.html.twig');
} }
} }

View File

@@ -5,7 +5,10 @@ namespace Mine\SeekerBundle\Entity;
use Doctrine\ORM\Mapping as ORM; use Doctrine\ORM\Mapping as ORM;
/** /**
* Gamer * Class Gamer
*
* @package Mine\SeekerBundle\Entity
* @author system7 <https://www.laszlolang.com>
* *
* @ORM\Table(name="gamer") * @ORM\Table(name="gamer")
* @ORM\Entity(repositoryClass="Mine\SeekerBundle\Repository\GamerRepository") * @ORM\Entity(repositoryClass="Mine\SeekerBundle\Repository\GamerRepository")
@@ -74,6 +77,13 @@ class Gamer
*/ */
private $userAgent; private $userAgent;
/**
* @var \DateTime
*
* @ORM\Column(name="conn_timestamp", type="datetime", nullable=false)
*/
private $connTimestamp;
/** /**
* Get id * Get id
@@ -180,4 +190,28 @@ class Gamer
{ {
return $this->userAgent; return $this->userAgent;
} }
/**
* Set connTimestamp
*
* @param \DateTime $connTimestamp
*
* @return Gamer
*/
public function setConnTimestamp($connTimestamp)
{
$this->connTimestamp = $connTimestamp;
return $this;
}
/**
* Get connTimestamp
*
* @return \DateTime
*/
public function getConnTimestamp()
{
return $this->connTimestamp;
}
} }

View File

@@ -74,6 +74,13 @@ class Gamer
*/ */
private $userAgent; private $userAgent;
/**
* @var \DateTime
*
* @ORM\Column(name="conn_timestamp", type="datetime", nullable=false)
*/
private $connTimestamp;
/** /**
* Get id * Get id
@@ -180,4 +187,28 @@ class Gamer
{ {
return $this->userAgent; return $this->userAgent;
} }
/**
* Set connTimestamp
*
* @param \DateTime $connTimestamp
*
* @return Gamer
*/
public function setConnTimestamp($connTimestamp)
{
$this->connTimestamp = $connTimestamp;
return $this;
}
/**
* Get connTimestamp
*
* @return \DateTime
*/
public function getConnTimestamp()
{
return $this->connTimestamp;
}
} }

View File

@@ -7,7 +7,10 @@ use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM; use Doctrine\ORM\Mapping as ORM;
/** /**
* Grid * Class Grid
*
* @package Mine\SeekerBundle\Entity
* @author system7 <https://www.laszlolang.com>
* *
* @ORM\Table(name="grid") * @ORM\Table(name="grid")
* @ORM\Entity(repositoryClass="Mine\SeekerBundle\Repository\GridRepository") * @ORM\Entity(repositoryClass="Mine\SeekerBundle\Repository\GridRepository")

View File

@@ -5,7 +5,10 @@ namespace Mine\SeekerBundle\Entity;
use Doctrine\ORM\Mapping as ORM; use Doctrine\ORM\Mapping as ORM;
/** /**
* GridRow * Class GridRow
*
* @package Mine\SeekerBundle\Entity
* @author system7 <https://www.laszlolang.com>
* *
* @ORM\Table(name="grid_row") * @ORM\Table(name="grid_row")
* @ORM\Entity(repositoryClass="Mine\SeekerBundle\Repository\GridRowRepository") * @ORM\Entity(repositoryClass="Mine\SeekerBundle\Repository\GridRowRepository")

View File

@@ -8,7 +8,10 @@ use Doctrine\ORM\Mapping as ORM;
use Jotunheimr\UserBundle\Entity\User; use Jotunheimr\UserBundle\Entity\User;
/** /**
* PlayedGame * Class PlayedGame
*
* @package Mine\SeekerBundle\Entity
* @author system7 <https://www.laszlolang.com>
* *
* @ORM\Table(name="played_game") * @ORM\Table(name="played_game")
* @ORM\Entity(repositoryClass="Mine\SeekerBundle\Repository\PlayedGameRepository") * @ORM\Entity(repositoryClass="Mine\SeekerBundle\Repository\PlayedGameRepository")
@@ -105,6 +108,20 @@ class PlayedGame
*/ */
private $resign; private $resign;
/**
* @var \DateTime
*
* @ORM\Column(name="created", type="datetime", nullable=true)
*/
private $created;
/**
* @var \DateTime
*
* @ORM\Column(name="updated", type="datetime", nullable=true)
*/
private $updated;
/** /**
* @var Step * @var Step
* *
@@ -429,4 +446,52 @@ class PlayedGame
{ {
return $this->resign; return $this->resign;
} }
/**
* Set created
*
* @param \DateTime $created
*
* @return PlayedGame
*/
public function setCreated($created)
{
$this->created = $created;
return $this;
}
/**
* Get created
*
* @return \DateTime
*/
public function getCreated()
{
return $this->created;
}
/**
* Set updated
*
* @param \DateTime $updated
*
* @return PlayedGame
*/
public function setUpdated($updated)
{
$this->updated = $updated;
return $this;
}
/**
* Get updated
*
* @return \DateTime
*/
public function getUpdated()
{
return $this->updated;
}
} }

View File

@@ -105,6 +105,20 @@ class PlayedGame
*/ */
private $resign; private $resign;
/**
* @var \DateTime
*
* @ORM\Column(name="created", type="datetime", nullable=true)
*/
private $created;
/**
* @var \DateTime
*
* @ORM\Column(name="updated", type="datetime", nullable=true)
*/
private $updated;
/** /**
* @var Step * @var Step
* *
@@ -405,4 +419,76 @@ class PlayedGame
{ {
return $this->step; return $this->step;
} }
/**
* Set resign
*
* @param string $resign
*
* @return PlayedGame
*/
public function setResign($resign)
{
$this->resign = $resign;
return $this;
}
/**
* Get resign
*
* @return string
*/
public function getResign()
{
return $this->resign;
}
/**
* Set created
*
* @param \DateTime $created
*
* @return PlayedGame
*/
public function setCreated($created)
{
$this->created = $created;
return $this;
}
/**
* Get created
*
* @return \DateTime
*/
public function getCreated()
{
return $this->created;
}
/**
* Set updated
*
* @param \DateTime $updated
*
* @return PlayedGame
*/
public function setUpdated($updated)
{
$this->updated = $updated;
return $this;
}
/**
* Get updated
*
* @return \DateTime
*/
public function getUpdated()
{
return $this->updated;
}
} }

View File

@@ -5,7 +5,10 @@ namespace Mine\SeekerBundle\Entity;
use Doctrine\ORM\Mapping as ORM; use Doctrine\ORM\Mapping as ORM;
/** /**
* Step * Class Step
*
* @package Mine\SeekerBundle\Entity
* @author system7 <https://www.laszlolang.com>
* *
* @ORM\Table(name="step") * @ORM\Table(name="step")
* @ORM\Entity(repositoryClass="Mine\SeekerBundle\Repository\StepRepository") * @ORM\Entity(repositoryClass="Mine\SeekerBundle\Repository\StepRepository")
@@ -49,6 +52,13 @@ class Step
*/ */
private $playedGame; private $playedGame;
/**
* @var \DateTime
*
* @ORM\Column(name="created", type="datetime", nullable=true)
*/
private $created;
/** /**
* Get id * Get id
@@ -155,4 +165,28 @@ class Step
{ {
return $this->wBomb; return $this->wBomb;
} }
/**
* Set created
*
* @param \DateTime $created
*
* @return Step
*/
public function setCreated($created)
{
$this->created = $created;
return $this;
}
/**
* Get created
*
* @return \DateTime
*/
public function getCreated()
{
return $this->created;
}
} }

View File

@@ -49,6 +49,13 @@ class Step
*/ */
private $playedGame; private $playedGame;
/**
* @var \DateTime
*
* @ORM\Column(name="created", type="datetime", nullable=true)
*/
private $created;
/** /**
* Get id * Get id
@@ -155,4 +162,28 @@ class Step
{ {
return $this->wBomb; return $this->wBomb;
} }
/**
* Set created
*
* @param \DateTime $created
*
* @return Step
*/
public function setCreated($created)
{
$this->created = $created;
return $this;
}
/**
* Get created
*
* @return \DateTime
*/
public function getCreated()
{
return $this->created;
}
} }

View File

@@ -7,6 +7,12 @@ use Gos\Bundle\WebSocketBundle\Event\ClientErrorEvent;
use Gos\Bundle\WebSocketBundle\Event\ServerEvent; use Gos\Bundle\WebSocketBundle\Event\ServerEvent;
use Gos\Bundle\WebSocketBundle\Event\ClientRejectedEvent; use Gos\Bundle\WebSocketBundle\Event\ClientRejectedEvent;
/**
* Class MineseekerClientEventListener
*
* @package Mine\SeekerBundle\EventListener
* @author system7 <https://www.laszlolang.com>
*/
class MineseekerClientEventListener class MineseekerClientEventListener
{ {
/** /**
@@ -69,4 +75,4 @@ class MineseekerClientEventListener
echo 'connection rejected from ' . $origin . PHP_EOL; echo 'connection rejected from ' . $origin . PHP_EOL;
} }
} }

View File

@@ -0,0 +1,42 @@
<?php
namespace Mine\SeekerBundle\Periodic;
use Gos\Bundle\WebSocketBundle\Periodic\PdoPeriodicPing;
use Gos\Bundle\WebSocketBundle\Periodic\PeriodicInterface;
/**
* Class MinePeriodic
*
* @package Mine\SeekerBundle\Periodic
* @author system7 <https://www.laszlolang.com>
*/
class MinePeriodic implements PeriodicInterface
{
/** @var PdoPeriodicPing */
private $ping;
public function __construct(PdoPeriodicPing $ping)
{
$this->ping = $ping;
}
/**
* This function is executed every 5 seconds.
*
* For more advanced functionality, try injecting a Topic Service to perform actions on your connections every x
* seconds.
*/
public function tick()
{
$this->ping->tick();
}
/**
* {@inheritdoc}
*/
public function getTimeout()
{
return 300;
}
}

View File

@@ -3,10 +3,10 @@
namespace Mine\SeekerBundle\Repository; namespace Mine\SeekerBundle\Repository;
/** /**
* GamerRepository * Class GamerRepository
* *
* This class was generated by the Doctrine ORM. Add your own custom * @package Mine\SeekerBundle\Repository
* repository methods below. * @author system7 <https://www.laszlolang.com>
*/ */
class GamerRepository extends \Doctrine\ORM\EntityRepository class GamerRepository extends \Doctrine\ORM\EntityRepository
{ {

View File

@@ -3,10 +3,10 @@
namespace Mine\SeekerBundle\Repository; namespace Mine\SeekerBundle\Repository;
/** /**
* GridColRepository * Class GridColRepository
* *
* This class was generated by the Doctrine ORM. Add your own custom * @package Mine\SeekerBundle\Repository
* repository methods below. * @author system7 <https://www.laszlolang.com>
*/ */
class GridColRepository extends \Doctrine\ORM\EntityRepository class GridColRepository extends \Doctrine\ORM\EntityRepository
{ {

View File

@@ -3,10 +3,10 @@
namespace Mine\SeekerBundle\Repository; namespace Mine\SeekerBundle\Repository;
/** /**
* GridRepository * Class GridRepository
* *
* This class was generated by the Doctrine ORM. Add your own custom * @package Mine\SeekerBundle\Repository
* repository methods below. * @author system7 <https://www.laszlolang.com>
*/ */
class GridRepository extends \Doctrine\ORM\EntityRepository class GridRepository extends \Doctrine\ORM\EntityRepository
{ {

View File

@@ -4,10 +4,10 @@ namespace Mine\SeekerBundle\Repository;
use Doctrine\ORM\EntityRepository; use Doctrine\ORM\EntityRepository;
/** /**
* GridRowRepository * Class GridRowRepository
* *
* This class was generated by the Doctrine ORM. Add your own custom * @package Mine\SeekerBundle\Repository
* repository methods below. * @author system7 <https://www.laszlolang.com>
*/ */
class GridRowRepository extends EntityRepository class GridRowRepository extends EntityRepository
{ {

View File

@@ -3,10 +3,10 @@
namespace Mine\SeekerBundle\Repository; namespace Mine\SeekerBundle\Repository;
/** /**
* PlayedGameRepository * Class PlayedGameRepository
* *
* This class was generated by the Doctrine ORM. Add your own custom * @package Mine\SeekerBundle\Repository
* repository methods below. * @author system7 <https://www.laszlolang.com>
*/ */
class PlayedGameRepository extends \Doctrine\ORM\EntityRepository class PlayedGameRepository extends \Doctrine\ORM\EntityRepository
{ {

View File

@@ -3,10 +3,10 @@
namespace Mine\SeekerBundle\Repository; namespace Mine\SeekerBundle\Repository;
/** /**
* StepRepository * Class StepRepository
* *
* This class was generated by the Doctrine ORM. Add your own custom * @package Mine\SeekerBundle\Repository
* repository methods below. * @author system7 <https://www.laszlolang.com>
*/ */
class StepRepository extends \Doctrine\ORM\EntityRepository class StepRepository extends \Doctrine\ORM\EntityRepository
{ {

View File

@@ -1,19 +1,14 @@
# PDO Session Handler Configuration !!!!! --> moved to main config.yml
#framework:
# session:
# handler_id: session.handler.pdo
# Doctrine cache --> instead of PREDIS (gos_web_socket > client > storage > driver) # Doctrine cache --> instead of PREDIS (gos_web_socket > client > storage > driver)
#doctrine_cache: doctrine_cache:
# providers: providers:
# redis_cache: redis_cache:
# redis: redis:
# host: localhost host: localhost
# port: 6379 port: 6379
# database: 3 database: 3
# websocket_cache_client: websocket_cache_client:
# type: redis type: redis
# alias: gos_web_socket.client_storage.driver.redis alias: gos_web_socket.client_storage.driver.redis
# SNC # SNC
snc_redis: snc_redis:
@@ -32,7 +27,7 @@ snc_redis:
gos_web_socket: gos_web_socket:
server: server:
host: 0.0.0.0 host: 0.0.0.0
port: 6450 port: "%mineseeker.websocket%"
router: router:
resources: resources:
- "@MineSeekerBundle/Resources/config/pubsub/routing.yml" - "@MineSeekerBundle/Resources/config/pubsub/routing.yml"
@@ -41,4 +36,7 @@ gos_web_socket:
session_handler: "@session.handler.pdo" session_handler: "@session.handler.pdo"
storage: storage:
driver: "@gos_web_socket.client_storage.driver.predis" driver: "@gos_web_socket.client_storage.driver.predis"
decorator: "@gos_web_socket.client_storage.doctrine.decorator" ttl: 28800 #(optionally) time to live if you use redis driver
prefix: client #(optionally) prefix if you use redis driver, create key "client:1" instead key "1"
periodic:
- "@mineseeker.periodic"

View File

@@ -1,4 +1,4 @@
# Topic Configuration # MineSeeker Topic Configuration
mineseeker_topic: mineseeker_topic:
channel: mineseeker/channel/{game} channel: mineseeker/channel/{game}
handler: handler:
@@ -7,6 +7,12 @@ mineseeker_topic:
# method: # method:
# path: '[a-z1-9A-Z]+' # path: '[a-z1-9A-Z]+'
# UserList Topic Configuration
userList_topic:
channel: mineseeker/userList
handler:
callback: 'userlist.topic'
# Remote Procedure Call Configuration # Remote Procedure Call Configuration
mineseeker_rpc: mineseeker_rpc:
channel: mineseeker-rpc/{method} channel: mineseeker-rpc/{method}

View File

@@ -1,16 +1,44 @@
MineSeekerBundle_homepage: MineSeekerBundle_homepage:
path: / path: /
defaults: { _controller: MineSeekerBundle:Game:index } defaults: { _controller: MineSeekerBundle:Game:index }
schemes: [https]
MineSeekerBundle_gamePlay: MineSeekerBundle_gamePlay:
path: /play path: /play
defaults: { _controller: MineSeekerBundle:Game:play } defaults: { _controller: MineSeekerBundle:Game:play }
schemes: [https]
MineSeekerBundle_gamePlayWId: MineSeekerBundle_gamePlayWId:
path: /play/{gameAssoc} path: /play/{gameAssoc}
defaults: { _controller: MineSeekerBundle:Game:play } defaults: { _controller: MineSeekerBundle:Game:play }
schemes: [https]
MineSeekerBundle_gameList: MineSeekerBundle_gameReplay:
path: /list path: /re-play/{gameAssoc}
defaults: { _controller: MineSeekerBundle:Game:list } defaults: { _controller: MineSeekerBundle:Game:rePlay }
schemes: [https]
MineSeekerBundle_slack:
path: /slack
defaults: { _controller: MineSeekerBundle:Game:slack }
schemes: [https]
MineSeekerBundle_terms:
path: /terms-of-service
defaults: { _controller: MineSeekerBundle:Game:terms }
schemes: [https]
MineSeekerBundle_privacy:
path: /privacy-policy
defaults: { _controller: MineSeekerBundle:Game:privacy }
schemes: [https]
MineSeekerBundle_contact:
path: /contact
defaults: { _controller: MineSeekerBundle:Game:contact }
schemes: [https]
MineSeekerBundle_landing:
path: /landing-page
defaults: { _controller: MineSeekerBundle:Game:landing }
schemes: [https]

View File

@@ -1,5 +1,4 @@
services: services:
pdo: pdo:
class: PDO class: PDO
arguments: arguments:
@@ -20,13 +19,14 @@ services:
arguments: arguments:
- "@snc_redis.cache" - "@snc_redis.cache"
# config.yml --> gos_web_socket > storage > client > decorator mineseeker.periodic:
gos_web_socket.client_storage.doctrine.decorator: class: Mine\SeekerBundle\Periodic\MinePeriodic
class: Gos\Bundle\WebSocketBundle\Client\Driver\DoctrineCacheDriverDecorator tags:
- { name: gos_web_socket.periodic }
arguments: arguments:
- "@doctrine_cache.providers.doctrine.orm.default_result_cache" ping: '@gos_web_socket.pdo.periodic_ping'
mineseeker.topic_sample_service: mineseeker.game_service:
class: Mine\SeekerBundle\Topic\MineseekerTopic class: Mine\SeekerBundle\Topic\MineseekerTopic
tags: tags:
- { name: gos_web_socket.topic } - { name: gos_web_socket.topic }
@@ -35,7 +35,16 @@ services:
doctrine: '@doctrine.orm.entity_manager' doctrine: '@doctrine.orm.entity_manager'
requestStack: '@request_stack' requestStack: '@request_stack'
mineseeker.rpc_sample_service: mineseeker.user_list_service:
class: Mine\SeekerBundle\Topic\UserListTopic
tags:
- { name: gos_web_socket.topic }
arguments:
clientManipulator: "@gos_web_socket.websocket.client_manipulator"
doctrine: '@doctrine.orm.entity_manager'
requestStack: '@request_stack'
mineseeker.game_rpc_service:
class: Mine\SeekerBundle\Rpc\MineseekerRpc class: Mine\SeekerBundle\Rpc\MineseekerRpc
tags: tags:
- { name: gos_web_socket.rpc } - { name: gos_web_socket.rpc }

View File

@@ -1,9 +1,3 @@
@import url('https://fonts.googleapis.com/css?family=Open+Sans+Condensed:300,700|Ravi+Prakash&subset=latin-ext');
/*
font-family: 'Ravi Prakash', cursive;
font-family: 'Open Sans Condensed', sans-serif;
*/
* { * {
outline: none; outline: none;
padding: 0; padding: 0;
@@ -11,59 +5,93 @@ font-family: 'Open Sans Condensed', sans-serif;
} }
html, body { html, body {
background: #2C3E50; background: #ffffff;
display: block; display: block;
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
header { header {
background: rgba(255, 255, 255, 0.7) url('/bundles/mineseeker/images/homepage/header.jpg') no-repeat; background: #d1e8ff;
background-size: cover;
position: relative; position: relative;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
width: 100%; width: 100%;
height: 100%; height: 950px;
color: #ffffff; color: #ffffff;
overflow: hidden; overflow: hidden;
} }
header h1 { header section {
display: block; display: flex;
font: normal 72px 'Ravi Prakash', cursive; align-items: flex-start;
text-align: center; justify-content: flex-start;
line-height: 20px; flex-direction: column;
color: #ffa800; max-width: 1300px;
width: 100%;
height: 100%;
padding: 20px;
margin: 0 auto;
}
header section div.logo img {
width: 350px;
margin: 50px 0;
}
header section div.logo a {
display: block;
}
header section > img {
position: absolute;
width: 1300px;
height: 1300px;
right: -20%;
top: -10%;
z-index: 1;
}
header section > div {
z-index: 2; z-index: 2;
} }
header h3 { header section h1 {
display: block; font: bold 40px 'Rajdhani', sans-serif;
font: normal 32px 'Open Sans Condensed', sans-serif; color: #434242;
text-align: center; margin-bottom: 100px;
color: #ffcd02;
z-index: 2;
} }
header > a { header section h2 {
background: #e8e8e8; font: normal 32px 'Rajdhani', sans-serif;
color: #434242;
margin-top: 100px;
}
header section h3 {
display: block; display: block;
font: bold 22px 'Open Sans Condensed', sans-serif; font: bold 16px 'Rajdhani', sans-serif;
color: #434242;
margin-top: 10px;
}
header section h3 img {
width: 16px;
}
header section div.buttons > a {
background: #69788e;
display: table;
font: bold 32px 'Rajdhani', sans-serif;
text-transform: uppercase; text-transform: uppercase;
text-decoration: none; text-decoration: none;
color: #2C3E50; border: 5px solid #57667b;
padding: 10px 70px; color: #FFFFFF;
margin-top: 20px; padding: 25px 150px;
margin-bottom: 20px;
z-index: 2; -webkit-box-shadow: 0 3px 10px rgba(0, 0, 0, 0.3);
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.3);
-webkit-box-shadow: 0 3px 5px rgba(0, 0, 0, 0.75);
box-shadow: 0 3px 5px rgba(0, 0, 0, 0.75);
-webkit-border-radius: 3px; -webkit-border-radius: 3px;
border-radius: 3px; border-radius: 3px;
-webkit-transition: all 250ms ease-in-out; -webkit-transition: all 250ms ease-in-out;
@@ -72,36 +100,237 @@ header > a {
transition: all 250ms ease-in-out; transition: all 250ms ease-in-out;
} }
header > a:hover { header section div.buttons > a:hover {
background: #ffffff; background: #57667b;
-webkit-box-shadow: 0 7px 10px rgba(0, 0, 0, 0.75); -webkit-box-shadow: 0 7px 15px rgba(0, 0, 0, 0.2);
box-shadow: 0 7px 10px rgba(0, 0, 0, 0.75); box-shadow: 0 7px 15px rgba(0, 0, 0, 0.2);
-webkit-transition: all 250ms ease-in-out; -webkit-transition: all 250ms ease-in-out;
-moz-transition: all 250ms ease-in-out; -moz-transition: all 250ms ease-in-out;
-o-transition: all 250ms ease-in-out; -o-transition: all 250ms ease-in-out;
transition: all 250ms ease-in-out; transition: all 250ms ease-in-out;
} }
header > img { header section div.buttons > a.small {
position: absolute; background: #83aed9;
width: 50%; display: inline-block;
max-width: 1000px; font: bold 22px 'Rajdhani', sans-serif;
bottom: -25%; border: 1px solid #6890ba;
color: #FFFFFF;
padding: 10px;
-webkit-box-shadow: 0 3px 10px rgba(0, 0, 0, 0.3);
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.3);
-webkit-transition: all 250ms ease-in-out;
-moz-transition: all 250ms ease-in-out;
-o-transition: all 250ms ease-in-out;
transition: all 250ms ease-in-out;
z-index: 1;
} }
@media screen and (max-width: 1500px) { header section div.buttons > a.small:hover {
header > img { background: #86b5e1;
width: 60%; border: 1px solid #658fb8;
bottom: -40%; color: #FFFFFF;
-webkit-box-shadow: 0 7px 15px rgba(0, 0, 0, 0.2);
box-shadow: 0 7px 15px rgba(0, 0, 0, 0.2);
-webkit-transition: all 250ms ease-in-out;
-moz-transition: all 250ms ease-in-out;
-o-transition: all 250ms ease-in-out;
transition: all 250ms ease-in-out;
}
main .user-list-container {
display: flex;
align-items: flex-start;
justify-content: center;
flex-wrap: wrap;
width: 100%;
}
main .user-list-container .user-friend {
background: #ccc;
width: 15%;
min-width: 145px;
text-align: center;
padding: 10px;
margin: 5px;
-webkit-border-radius: 3px;
border-radius: 3px;
}
main .user-list-container .user-friend h1 {
display: block;
font-size: 14px;
text-align: center;
}
main .user-list-container .user-friend .img,
main .user-list-container .user-friend .img img {
width: 100%;
}
main .user-list-container .user-friend button {
background: #83aed9;
display: inline-block;
font: bold 22px 'Rajdhani', sans-serif;
border: 1px solid #6890ba;
color: #FFFFFF;
padding: 10px;
-webkit-transition: all 250ms ease-in-out;
-moz-transition: all 250ms ease-in-out;
-o-transition: all 250ms ease-in-out;
transition: all 250ms ease-in-out;
-webkit-border-radius: 3px;
border-radius: 3px;
}
main .user-list-container .user-friend button:hover {
background: #86b5e1;
border: 1px solid #658fb8;
color: #FFFFFF;
-webkit-transition: all 250ms ease-in-out;
-moz-transition: all 250ms ease-in-out;
-o-transition: all 250ms ease-in-out;
transition: all 250ms ease-in-out;
}
main .user-list-container .user-friend button.button-offline {
background: #a1a1a1;
border: 1px solid #929292;
cursor: default;
}
main .user-list-container .user-friend button.button-offline:hover {
background: #a1a1a1;
border: 1px solid #929292;
}
main .user-list-filter form {
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 20px;
}
main .user-list-filter input {
border: 1px solid #ccc;
border-right: 0;
min-width: 300px;
padding: 10px;
-webkit-border-top-left-radius: 3px;
border-top-left-radius: 3px;
-webkit-border-bottom-left-radius: 3px;
border-bottom-left-radius: 3px;
}
main .user-list-filter button {
background: #ccc;
width: 42px;
height: 42px;
border: 0;
color: #fff;
-webkit-border-top-right-radius: 3px;
border-top-right-radius: 3px;
-webkit-border-bottom-right-radius: 3px;
border-bottom-right-radius: 3px;
}
main .user-request-container {
display: flex;
align-items: center;
justify-content: center;
}
main .user-request-container .user-friend {
background: #ff0000;
width: 150px;
color: #403f3f;
padding: 10px;
margin: 10px;
-webkit-border-radius: 3px;
border-radius: 3px;
}
main .user-request-container h1 {
font-size: 14px;
color: #fff;
}
main .user-request-container .img,
main .user-request-container .img img {
width: 100%;
}
main .user-request-container button {
background: #fff;
width: 100%;
font-weight: bold;
color: #ff0000;
border: 0;
padding: 15px 5px;
margin: 0 auto;
-webkit-border-radius: 3px;
border-radius: 3px;
-webkit-transition: all 250ms ease-in-out;
-moz-transition: all 250ms ease-in-out;
-o-transition: all 250ms ease-in-out;
transition: all 250ms ease-in-out;
}
main .user-request-container button:hover {
background: #ffc38b;
-webkit-transition: all 250ms ease-in-out;
-moz-transition: all 250ms ease-in-out;
-o-transition: all 250ms ease-in-out;
transition: all 250ms ease-in-out;
}
@media screen and (max-width: 1200px) {
header section {
align-items: center;
justify-content: center;
text-align: center;
}
header section div.buttons > a {
margin: 0 auto 20px auto;
}
header section h1 {
margin-bottom: 20px;
}
header section div.logo img {
margin-bottom: 0;
}
header section > img {
display: none;
} }
} }
@media screen and (max-width: 1500px) { @media screen and (max-width: 500px) {
header > img { header section {
width: 70%; width: auto;
bottom: -20%;
} }
}
header section div.logo img {
width: 100%;
}
header section div.buttons > a {
display: block;
padding: 25px 5px;
}
}

View File

@@ -96,51 +96,37 @@ main {
#mine-wrapper .game-wrapper .game-overlay .game-overlay-window h1 { #mine-wrapper .game-wrapper .game-overlay .game-overlay-window h1 {
font-weight: bold; font-weight: bold;
font-size: 32px; font-size: 26px;
} }
#mine-wrapper .game-wrapper .game-overlay .game-overlay-window h2 { #mine-wrapper .game-wrapper .game-overlay .game-overlay-window h2 {
font-size: 18px; font-size: 18px;
} }
#mine-wrapper .game-wrapper .game-overlay .game-overlay-window h3 {
font-size: 16px;
color: #386e8c;
}
#mine-wrapper .game-wrapper .game-overlay .game-overlay-window .clippy { #mine-wrapper .game-wrapper .game-overlay .game-overlay-window .clippy {
display: flex; display: flex;
align-items: center; align-items: center;
width: 100%; width: 100%;
margin-bottom: 10px;
} }
#mine-wrapper .game-wrapper .game-overlay .game-overlay-window .clippy input { #mine-wrapper .game-wrapper .game-overlay .game-overlay-window .clippy input {
border: 0; border: 0;
height: 40px; height: 40px;
width: 90%; width: 100%;
padding: 0 20px; padding: 0 20px;
-webkit-border-top-left-radius: 3px; -webkit-border-radius: 3px;
border-top-left-radius: 3px; border-radius: 3px;
-webkit-border-bottom-left-radius: 3px;
border-bottom-left-radius: 3px;
-webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075); -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075); box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075);
} }
#mine-wrapper .game-wrapper .game-overlay .game-overlay-window .clippy button {
border: 0;
width: 10%;
height: 40px;
cursor: pointer;
-webkit-border-top-right-radius: 3px;
border-top-right-radius: 3px;
-webkit-border-bottom-right-radius: 3px;
border-bottom-right-radius: 3px;
}
#mine-wrapper .game-wrapper .game-overlay .game-overlay-window .clippy button img {
width: 15px;
height: 15px;
}
#mine-wrapper .game-wrapper .game-overlay .game-overlay-window a { #mine-wrapper .game-wrapper .game-overlay .game-overlay-window a {
background: #d8e3ea; background: #d8e3ea;
display: inline-table; display: inline-table;
@@ -326,7 +312,6 @@ main {
color: #fdf612; color: #fdf612;
} }
#mine-wrapper .game-wrapper .users .user-container .user-control { #mine-wrapper .game-wrapper .users .user-container .user-control {
background: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.5) 0%, rgba(125, 185, 232, 0) 100%); background: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.5) 0%, rgba(125, 185, 232, 0) 100%);
background: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.5) 0%, rgba(125, 185, 232, 0) 100%); background: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.5) 0%, rgba(125, 185, 232, 0) 100%);
@@ -734,7 +719,7 @@ main {
flex-wrap: wrap; flex-wrap: wrap;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
width: 642px; width: 643px;
border: 1px solid #cac3e5; border: 1px solid #cac3e5;
cursor: none; cursor: none;
@@ -973,3 +958,70 @@ main {
#mine-wrapper .grid .field-wrapper .field img { #mine-wrapper .grid .field-wrapper .field img {
width: 80%; width: 80%;
} }
.back-from-game {
display: inline-block;
position: fixed;
top: 20px;
left: 20px;
-ms-transform: scale(1); /* IE 9 */
-webkit-transform: scale(1); /* Safari */
transform: scale(1);
-webkit-transition: all 250ms cubic-bezier(.17, .67, .83, .67);
transition: all 250ms cubic-bezier(.17, .67, .83, .67);
}
.back-from-game img {
width: 100px;
}
.back-from-game:hover {
-ms-transform: scale(1.2); /* IE 9 */
-webkit-transform: scale(1.2); /* Safari */
transform: scale(1.2);
-webkit-transition: all 250ms cubic-bezier(.17, .67, .83, .67);
transition: all 250ms cubic-bezier(.17, .67, .83, .67);
}
@media screen and (max-width: 900px) {
#mine-wrapper .game-wrapper .users {
visibility: hidden;
display: none;
}
#mine-wrapper {
display: block;
width: 100%;
}
#mine-wrapper .game-wrapper {
width: 100%;
flex-direction: column-reverse;
}
#mine-wrapper .grid-container {
width: 100%;
padding: 0;
}
#mine-wrapper .grid {
width: 100%;
}
#mine-wrapper .grid .field-wrapper {
width: 6.25%;
}
#mine-wrapper .grid .field-wrapper > img.field-target {
width: 105%;
top: -2.5%;
left: -2.5%;
}
#mine-wrapper .grid .field-wrapper .field {
width: 100%;
height: auto;
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.8 KiB

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.7 KiB

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 282 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 456 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<browserconfig>
<msapplication>
<tile>
<square150x150logo src="/mstile-150x150.png"/>
<TileColor>#2d89ef</TileColor>
</tile>
</msapplication>
</browserconfig>

Binary file not shown.

After

Width:  |  Height:  |  Size: 621 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@@ -0,0 +1,17 @@
{
"name": "",
"icons": [
{
"src": "\/android-chrome-192x192.png",
"sizes": "192x192",
"type": "image\/png"
},
{
"src": "\/android-chrome-512x512.png",
"sizes": "512x512",
"type": "image\/png"
}
],
"theme_color": "#ffffff",
"display": "standalone"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Some files were not shown because too many files have changed in this diff Show More