From 588919529e13e4e7613323896e0b1c96d2958e41 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?David=20Naist=20=C3=98vernes?=
Date: Fri, 8 Feb 2019 10:29:09 +0100
Subject: [PATCH 01/31] Quick-fix: Fixed the rounding of a button and centered
a message
---
css/main.css | 113 +++++++++++---------------------------
css/main.css.map | 2 +-
login.php | 5 +-
scss/partials/_login.scss | 8 ++-
4 files changed, 44 insertions(+), 84 deletions(-)
diff --git a/css/main.css b/css/main.css
index 5e3f013..c95865b 100644
--- a/css/main.css
+++ b/css/main.css
@@ -10,8 +10,7 @@ h1 {
margin: 0.67em 0; }
hr {
- -webkit-box-sizing: content-box;
- box-sizing: content-box;
+ box-sizing: content-box;
height: 0;
overflow: visible; }
@@ -20,14 +19,12 @@ pre {
font-size: 1em; }
a {
- background-color: transparent;
-}
+ background-color: transparent; }
abbr[title] {
border-bottom: none;
text-decoration: underline;
- -webkit-text-decoration: underline dotted;
- text-decoration: underline dotted; }
+ text-decoration: underline dotted; }
b,
strong {
@@ -99,8 +96,7 @@ fieldset {
padding: 0.35em 0.75em 0.625em; }
legend {
- -webkit-box-sizing: border-box;
- box-sizing: border-box;
+ box-sizing: border-box;
color: inherit;
display: table;
max-width: 100%;
@@ -115,8 +111,7 @@ textarea {
[type="checkbox"],
[type="radio"] {
- -webkit-box-sizing: border-box;
- box-sizing: border-box;
+ box-sizing: border-box;
padding: 0; }
[type="number"]::-webkit-inner-spin-button,
@@ -149,21 +144,14 @@ template {
*,
*:after,
*:before {
- -webkit-box-sizing: inherit;
- box-sizing: inherit; }
+ box-sizing: inherit; }
html {
- -webkit-box-sizing: border-box;
- box-sizing: border-box;
+ box-sizing: border-box;
font-size: 62.5%; }
body {
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -ms-flex-direction: column;
- flex-direction: column;
- display: -webkit-box;
- display: -ms-flexbox;
+ flex-direction: column;
display: flex;
min-height: 100vh;
font-size: 1.6em;
@@ -173,21 +161,15 @@ body {
letter-spacing: 0.01em; }
main {
- -webkit-box-flex: 1;
- -ms-flex: 1;
- flex: 1; }
+ flex: 1; }
.button-text, .button-outlined, .button-contained, .button-toggle {
display: inline-block;
- -webkit-transition: 0.3s;
transition: 0.3s;
border: 1px solid transparent;
border-radius: 0.3rem;
padding: 1rem 1.6rem 0.9rem;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
+ user-select: none;
font-size: 1.4rem;
font-weight: 700;
text-align: center;
@@ -232,15 +214,12 @@ main {
height: 4.1rem;
background-color: transparent; }
.button-toggle > img, .button-toggle > svg {
- -webkit-transform: translateY(0.5rem);
- transform: translateY(0.5rem);
+ transform: translateY(0.5rem);
margin-top: -1rem;
width: 2rem;
height: 2rem; }
.button-group {
- display: -webkit-inline-box;
- display: -ms-inline-flexbox;
display: inline-flex; }
.button-group > *:not(:first-child) {
border-left: none;
@@ -253,8 +232,7 @@ main {
.button-ripple {
position: relative;
overflow: hidden;
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0); }
+ transform: translate3d(0, 0, 0); }
.button-ripple:after {
content: "";
display: block;
@@ -267,18 +245,12 @@ main {
background-image: radial-gradient(circle, #b9d9be 10%, transparent 10.01%);
background-repeat: no-repeat;
background-position: 50%;
- -webkit-transform: scale(10, 10);
- transform: scale(10, 10);
+ transform: scale(10, 10);
opacity: 0;
- -webkit-transition: opacity 1s, -webkit-transform 0.5s;
- transition: opacity 1s, -webkit-transform 0.5s;
- transition: transform 0.5s, opacity 1s;
- transition: transform 0.5s, opacity 1s, -webkit-transform 0.5s; }
+ transition: transform 0.5s, opacity 1s; }
.button-ripple:active:after {
- -webkit-transform: scale(0, 0);
- transform: scale(0, 0);
+ transform: scale(0, 0);
opacity: 0.3;
- -webkit-transition: 0s;
transition: 0s; }
.button-block {
@@ -294,21 +266,16 @@ main {
position: absolute;
top: 50%;
left: 2.4rem;
- -webkit-transform: translateY(-50%);
- transform: translateY(-50%);
+ transform: translateY(-50%);
opacity: 0;
- -webkit-transition: opacity 0.3s ease, -webkit-transform 0.3s ease;
- transition: opacity 0.3s ease, -webkit-transform 0.3s ease;
transition: opacity 0.3s ease, transform 0.3s ease;
- transition: opacity 0.3s ease, transform 0.3s ease, -webkit-transform 0.3s ease;
font-size: 1.2rem; }
.float-label input:not(:placeholder-shown) {
padding: 2.4rem 2.4rem 1rem; }
.float-label input:not(:placeholder-shown) + label {
- -webkit-transform: translateY(calc(-50% - 1.6rem));
- transform: translateY(calc(-50% - 1.6rem));
+ transform: translateY(calc(-50% - 1.6rem));
opacity: 0.5; }
body {
@@ -316,8 +283,7 @@ body {
.card {
position: relative;
- -webkit-box-shadow: 0 4px 6px 0 rgba(0, 0, 0, 0.2);
- box-shadow: 0 4px 6px 0 rgba(0, 0, 0, 0.2);
+ box-shadow: 0 4px 6px 0 rgba(0, 0, 0, 0.2);
border-radius: 2px;
width: 200px;
overflow: hidden; }
@@ -332,38 +298,24 @@ body {
background-color: white; }
.card-details {
- display: -webkit-box;
- display: -ms-flexbox;
display: flex;
- -webkit-box-pack: center;
- -ms-flex-pack: center;
- justify-content: center;
- -webkit-box-align: center;
- -ms-flex-align: center;
- align-items: center;
+ justify-content: center;
+ align-items: center;
position: absolute;
bottom: 0;
width: 100%;
min-height: 60px;
- background-image: -webkit-gradient(linear, left bottom, left top, from(rgba(0, 0, 0, 0.75)), to(transparent));
background-image: linear-gradient(0deg, rgba(0, 0, 0, 0.75), transparent);
color: white; }
.login-wrapper {
- display: -webkit-box;
- display: -ms-flexbox;
display: flex; }
.login-container {
- -webkit-box-align: center;
- -ms-flex-align: center;
- align-items: center;
+ align-items: center;
z-index: 1000;
- display: -webkit-box;
- display: -ms-flexbox;
display: flex;
- -webkit-box-shadow: 0 0 6px 0 rgba(0, 0, 0, 0.2), 0 0 12px 0 rgba(0, 0, 0, 0.2);
- box-shadow: 0 0 6px 0 rgba(0, 0, 0, 0.2), 0 0 12px 0 rgba(0, 0, 0, 0.2);
+ box-shadow: 0 0 6px 0 rgba(0, 0, 0, 0.2), 0 0 12px 0 rgba(0, 0, 0, 0.2);
width: 100%; }
.login {
@@ -387,8 +339,7 @@ body {
.login input[type=password], .login input[type=email] {
margin-bottom: 1rem;
- -webkit-box-shadow: inset 0.1rem 0.1rem rgba(0, 0, 0, 0.1), 0 -0.1rem 0 rgba(255, 255, 255, 0.15);
- box-shadow: inset 0.1rem 0.1rem rgba(0, 0, 0, 0.1), 0 -0.1rem 0 rgba(255, 255, 255, 0.15);
+ box-shadow: inset 0.1rem 0.1rem rgba(0, 0, 0, 0.1), 0 -0.1rem 0 rgba(255, 255, 255, 0.15);
border-radius: 5000rem;
border: none;
width: 100%; }
@@ -396,7 +347,7 @@ body {
.login input:focus {
outline: none; }
-.login button {
+.login input[type=submit] {
position: relative;
border-radius: 5000rem;
cursor: pointer; }
@@ -405,8 +356,7 @@ body {
position: absolute;
top: 50%;
left: 1.4rem;
- -webkit-transform: translateY(-50%);
- transform: translateY(-50%);
+ transform: translateY(-50%);
width: 2.4rem;
vertical-align: top; }
@@ -414,11 +364,7 @@ body {
margin-left: 1rem; }
.login-controllers {
- -webkit-box-pack: end;
- -ms-flex-pack: end;
- justify-content: flex-end;
- display: -webkit-box;
- display: -ms-flexbox;
+ justify-content: flex-end;
display: flex; }
.login-image {
@@ -429,6 +375,11 @@ body {
background-repeat: no-repeat;
background-color: white; }
+.login-fail {
+ margin: 0 auto;
+ padding: 0 2rem;
+ max-width: 40rem; }
+
@media (min-width: 60rem) {
.login-container {
min-width: 50rem;
@@ -448,4 +399,4 @@ body {
clear: both;
display: table; }
-/*# sourceMappingURL=main.css.map */
\ No newline at end of file
+/*# sourceMappingURL=main.css.map */
diff --git a/css/main.css.map b/css/main.css.map
index f46defa..de68354 100644
--- a/css/main.css.map
+++ b/css/main.css.map
@@ -1,6 +1,6 @@
{
"version": 3,
-"mappings": "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",
+"mappings": "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",
"sources": ["../scss/vendor/_normalize.scss","../scss/partials/_base.scss","../scss/partials/_button.scss","../scss/modules/_color.scss","../scss/partials/_float-label.scss","../scss/partials/_card.scss","../scss/partials/_login.scss","../scss/partials/_utility.scss"],
"names": [],
"file": "main.css"
diff --git a/login.php b/login.php
index d7d67fa..16ce519 100644
--- a/login.php
+++ b/login.php
@@ -72,7 +72,10 @@
-
+
+
+
+
diff --git a/scss/partials/_login.scss b/scss/partials/_login.scss
index 3619911..74ae3dc 100644
--- a/scss/partials/_login.scss
+++ b/scss/partials/_login.scss
@@ -48,7 +48,7 @@
outline: none;
}
-.login button {
+.login input[type=submit] {
position: relative;
border-radius: 5000rem;
@@ -88,6 +88,12 @@
background-color: white;
}
+.login-fail {
+ margin: 0 auto;
+ padding: 0 2rem;
+ max-width: 40rem;
+}
+
@media (min-width: 60rem) {
.login-container {
From 341dbd99b8b247d5b33acdbd04548569f8ec7b69 Mon Sep 17 00:00:00 2001
From: Unknown
Date: Fri, 8 Feb 2019 11:51:18 +0100
Subject: [PATCH 02/31] Added verify_code to the db and user.php
In preparation for the email activation system
---
gamesite_db.sql | 41 +++++++++++++++++++++--------------------
includes/user.php | 4 +++-
2 files changed, 24 insertions(+), 21 deletions(-)
diff --git a/gamesite_db.sql b/gamesite_db.sql
index d5c6804..fba49f0 100644
--- a/gamesite_db.sql
+++ b/gamesite_db.sql
@@ -1,11 +1,11 @@
-- phpMyAdmin SQL Dump
--- version 4.8.3
+-- version 4.8.1
-- https://www.phpmyadmin.net/
--
-- Host: 127.0.0.1
--- Generation Time: 28. Jan, 2019 23:27 PM
--- Tjener-versjon: 10.1.35-MariaDB
--- PHP Version: 7.2.9
+-- Generation Time: Feb 08, 2019 at 11:24 AM
+-- Server version: 10.1.33-MariaDB
+-- PHP Version: 7.2.6
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
@@ -25,7 +25,7 @@ SET time_zone = "+00:00";
-- --------------------------------------------------------
--
--- Tabellstruktur for tabell `achievements`
+-- Table structure for table `achievements`
--
CREATE TABLE `achievements` (
@@ -35,7 +35,7 @@ CREATE TABLE `achievements` (
-- --------------------------------------------------------
--
--- Tabellstruktur for tabell `friend_list`
+-- Table structure for table `friend_list`
--
CREATE TABLE `friend_list` (
@@ -46,7 +46,7 @@ CREATE TABLE `friend_list` (
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
--- Dataark for tabell `friend_list`
+-- Dumping data for table `friend_list`
--
INSERT INTO `friend_list` (`id`, `user_1`, `user_2`, `status`) VALUES
@@ -55,7 +55,7 @@ INSERT INTO `friend_list` (`id`, `user_1`, `user_2`, `status`) VALUES
-- --------------------------------------------------------
--
--- Tabellstruktur for tabell `gained_achievements`
+-- Table structure for table `gained_achievements`
--
CREATE TABLE `gained_achievements` (
@@ -67,7 +67,7 @@ CREATE TABLE `gained_achievements` (
-- --------------------------------------------------------
--
--- Tabellstruktur for tabell `games`
+-- Table structure for table `games`
--
CREATE TABLE `games` (
@@ -82,7 +82,7 @@ CREATE TABLE `games` (
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
--- Dataark for tabell `games`
+-- Dumping data for table `games`
--
INSERT INTO `games` (`id`, `title`, `genre`, `description`, `creator`, `foldername`, `filename`, `size`) VALUES
@@ -94,7 +94,7 @@ INSERT INTO `games` (`id`, `title`, `genre`, `description`, `creator`, `folderna
-- --------------------------------------------------------
--
--- Tabellstruktur for tabell `ratings`
+-- Table structure for table `ratings`
--
CREATE TABLE `ratings` (
@@ -107,7 +107,7 @@ CREATE TABLE `ratings` (
-- --------------------------------------------------------
--
--- Tabellstruktur for tabell `users`
+-- Table structure for table `users`
--
CREATE TABLE `users` (
@@ -120,22 +120,23 @@ CREATE TABLE `users` (
`last_name` varchar(50) NOT NULL,
`user_image` varchar(100) NOT NULL,
`joined` date NOT NULL,
- `privilege_level` tinyint(4) NOT NULL
+ `privilege_level` tinyint(4) NOT NULL,
+ `verify_code` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
--- Dataark for tabell `users`
+-- Dumping data for table `users`
--
-INSERT INTO `users` (`id`, `email`, `username`, `password`, `first_name`, `middle_name`, `last_name`, `user_image`, `joined`, `privilege_level`) VALUES
-(1, 'hehe@willi.no', 'WilliWonka', 'qwerty', 'Willy', 'Wonka', 'Wonksense', '1.png', '2019-01-23', 1),
-(2, 'Derp@Derpesen.no', 'Derperud', 'qwerty', 'Dermont', 'Derp', 'Derperu', '3.png', '2019-01-23', 0),
-(3, 'heman@willi.no', 'heman', 'qwerty', 'misterio', 'universio', 'Wonkondo', '2.png', '2019-01-23', 0);
+INSERT INTO `users` (`id`, `email`, `username`, `password`, `first_name`, `middle_name`, `last_name`, `user_image`, `joined`, `privilege_level`, `verify_code`) VALUES
+(1, 'hehe@willi.no', 'WilliWonka', 'qwerty', 'Willy', 'Wonka', 'Wonksense', '1.png', '2019-01-23', 1, ''),
+(2, 'Derp@Derpesen.no', 'Derperud', 'qwerty', 'Dermont', 'Derp', 'Derperu', '3.png', '2019-01-23', 0, ''),
+(3, 'heman@willi.no', 'heman', 'qwerty', 'misterio', 'universio', 'Wonkondo', '2.png', '2019-01-23', 0, '');
-- --------------------------------------------------------
--
--- Tabellstruktur for tabell `user_activity`
+-- Table structure for table `user_activity`
--
CREATE TABLE `user_activity` (
@@ -148,7 +149,7 @@ CREATE TABLE `user_activity` (
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
--- Dataark for tabell `user_activity`
+-- Dumping data for table `user_activity`
--
INSERT INTO `user_activity` (`id`, `act`, `user_id`, `target_id`, `type`, `date`) VALUES
diff --git a/includes/user.php b/includes/user.php
index 38b6e80..1f6f89a 100644
--- a/includes/user.php
+++ b/includes/user.php
@@ -7,7 +7,7 @@ class User extends Db_object{
protected static $db_table = "users"; //Slik at man kan endre navnet på databasetabellen.
//Array skal brukes i properies() og inneholder bruker-variablene til objektet.
- protected static $db_table_fields = array('username', 'email', 'password', 'first_name', 'middle_name', 'last_name', 'user_image', 'joined');
+ protected static $db_table_fields = array('username', 'email', 'password', 'first_name', 'middle_name', 'last_name', 'user_image', 'joined', 'verify_code' );
public $id;
public $username;
public $email;
@@ -17,6 +17,7 @@ class User extends Db_object{
public $last_name;
public $user_image;
public $joined;
+ public $verify_code;
// Verifiserer at brukeren ligger i databasen, brukes ved login og kan brukes andre steder.
public static function verify_user($email, $password) {
@@ -252,6 +253,7 @@ public static function verify_new_user($username, $email, $password, $password_c
$user->last_name = $last_name;
$user->user_image = "1.png";
$user->joined = date("Y-m-d");
+ $user->verify_code = md5($username . microtime());
$user->create();
From 023ae60133aadabe62586245c9e6811612b1e5f3 Mon Sep 17 00:00:00 2001
From: Unknown
Date: Fri, 8 Feb 2019 11:51:18 +0100
Subject: [PATCH 03/31] Added verify_code to the db and user.php
In preparation for the email activation system
It uses the username + current microtime for making the verification code and then it hashes this to make it unique
---
gamesite_db.sql | 41 +++++++++++++++++++++--------------------
includes/user.php | 4 +++-
2 files changed, 24 insertions(+), 21 deletions(-)
diff --git a/gamesite_db.sql b/gamesite_db.sql
index d5c6804..fba49f0 100644
--- a/gamesite_db.sql
+++ b/gamesite_db.sql
@@ -1,11 +1,11 @@
-- phpMyAdmin SQL Dump
--- version 4.8.3
+-- version 4.8.1
-- https://www.phpmyadmin.net/
--
-- Host: 127.0.0.1
--- Generation Time: 28. Jan, 2019 23:27 PM
--- Tjener-versjon: 10.1.35-MariaDB
--- PHP Version: 7.2.9
+-- Generation Time: Feb 08, 2019 at 11:24 AM
+-- Server version: 10.1.33-MariaDB
+-- PHP Version: 7.2.6
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
@@ -25,7 +25,7 @@ SET time_zone = "+00:00";
-- --------------------------------------------------------
--
--- Tabellstruktur for tabell `achievements`
+-- Table structure for table `achievements`
--
CREATE TABLE `achievements` (
@@ -35,7 +35,7 @@ CREATE TABLE `achievements` (
-- --------------------------------------------------------
--
--- Tabellstruktur for tabell `friend_list`
+-- Table structure for table `friend_list`
--
CREATE TABLE `friend_list` (
@@ -46,7 +46,7 @@ CREATE TABLE `friend_list` (
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
--- Dataark for tabell `friend_list`
+-- Dumping data for table `friend_list`
--
INSERT INTO `friend_list` (`id`, `user_1`, `user_2`, `status`) VALUES
@@ -55,7 +55,7 @@ INSERT INTO `friend_list` (`id`, `user_1`, `user_2`, `status`) VALUES
-- --------------------------------------------------------
--
--- Tabellstruktur for tabell `gained_achievements`
+-- Table structure for table `gained_achievements`
--
CREATE TABLE `gained_achievements` (
@@ -67,7 +67,7 @@ CREATE TABLE `gained_achievements` (
-- --------------------------------------------------------
--
--- Tabellstruktur for tabell `games`
+-- Table structure for table `games`
--
CREATE TABLE `games` (
@@ -82,7 +82,7 @@ CREATE TABLE `games` (
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
--- Dataark for tabell `games`
+-- Dumping data for table `games`
--
INSERT INTO `games` (`id`, `title`, `genre`, `description`, `creator`, `foldername`, `filename`, `size`) VALUES
@@ -94,7 +94,7 @@ INSERT INTO `games` (`id`, `title`, `genre`, `description`, `creator`, `folderna
-- --------------------------------------------------------
--
--- Tabellstruktur for tabell `ratings`
+-- Table structure for table `ratings`
--
CREATE TABLE `ratings` (
@@ -107,7 +107,7 @@ CREATE TABLE `ratings` (
-- --------------------------------------------------------
--
--- Tabellstruktur for tabell `users`
+-- Table structure for table `users`
--
CREATE TABLE `users` (
@@ -120,22 +120,23 @@ CREATE TABLE `users` (
`last_name` varchar(50) NOT NULL,
`user_image` varchar(100) NOT NULL,
`joined` date NOT NULL,
- `privilege_level` tinyint(4) NOT NULL
+ `privilege_level` tinyint(4) NOT NULL,
+ `verify_code` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
--- Dataark for tabell `users`
+-- Dumping data for table `users`
--
-INSERT INTO `users` (`id`, `email`, `username`, `password`, `first_name`, `middle_name`, `last_name`, `user_image`, `joined`, `privilege_level`) VALUES
-(1, 'hehe@willi.no', 'WilliWonka', 'qwerty', 'Willy', 'Wonka', 'Wonksense', '1.png', '2019-01-23', 1),
-(2, 'Derp@Derpesen.no', 'Derperud', 'qwerty', 'Dermont', 'Derp', 'Derperu', '3.png', '2019-01-23', 0),
-(3, 'heman@willi.no', 'heman', 'qwerty', 'misterio', 'universio', 'Wonkondo', '2.png', '2019-01-23', 0);
+INSERT INTO `users` (`id`, `email`, `username`, `password`, `first_name`, `middle_name`, `last_name`, `user_image`, `joined`, `privilege_level`, `verify_code`) VALUES
+(1, 'hehe@willi.no', 'WilliWonka', 'qwerty', 'Willy', 'Wonka', 'Wonksense', '1.png', '2019-01-23', 1, ''),
+(2, 'Derp@Derpesen.no', 'Derperud', 'qwerty', 'Dermont', 'Derp', 'Derperu', '3.png', '2019-01-23', 0, ''),
+(3, 'heman@willi.no', 'heman', 'qwerty', 'misterio', 'universio', 'Wonkondo', '2.png', '2019-01-23', 0, '');
-- --------------------------------------------------------
--
--- Tabellstruktur for tabell `user_activity`
+-- Table structure for table `user_activity`
--
CREATE TABLE `user_activity` (
@@ -148,7 +149,7 @@ CREATE TABLE `user_activity` (
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
--- Dataark for tabell `user_activity`
+-- Dumping data for table `user_activity`
--
INSERT INTO `user_activity` (`id`, `act`, `user_id`, `target_id`, `type`, `date`) VALUES
diff --git a/includes/user.php b/includes/user.php
index 38b6e80..1f6f89a 100644
--- a/includes/user.php
+++ b/includes/user.php
@@ -7,7 +7,7 @@ class User extends Db_object{
protected static $db_table = "users"; //Slik at man kan endre navnet på databasetabellen.
//Array skal brukes i properies() og inneholder bruker-variablene til objektet.
- protected static $db_table_fields = array('username', 'email', 'password', 'first_name', 'middle_name', 'last_name', 'user_image', 'joined');
+ protected static $db_table_fields = array('username', 'email', 'password', 'first_name', 'middle_name', 'last_name', 'user_image', 'joined', 'verify_code' );
public $id;
public $username;
public $email;
@@ -17,6 +17,7 @@ class User extends Db_object{
public $last_name;
public $user_image;
public $joined;
+ public $verify_code;
// Verifiserer at brukeren ligger i databasen, brukes ved login og kan brukes andre steder.
public static function verify_user($email, $password) {
@@ -252,6 +253,7 @@ public static function verify_new_user($username, $email, $password, $password_c
$user->last_name = $last_name;
$user->user_image = "1.png";
$user->joined = date("Y-m-d");
+ $user->verify_code = md5($username . microtime());
$user->create();
From aad1daf0351b2622e2547656a6611beacc87f131 Mon Sep 17 00:00:00 2001
From: Unknown
Date: Fri, 8 Feb 2019 13:37:49 +0100
Subject: [PATCH 04/31] Added script to block refresh on login.php
Will finish the login here and check out the functions, look at what we can do for security and check on the error messages.
---
login.php | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)
diff --git a/login.php b/login.php
index 16ce519..fcb1451 100644
--- a/login.php
+++ b/login.php
@@ -7,7 +7,6 @@
if ($session->is_signed_in()) {redirect("index.php");}
if (isset($_POST['submit'])) {
- echo "User found!";
$email = trim($_POST['email']);
$password = trim($_POST['password']);
@@ -68,7 +67,7 @@
Sign up
-
+
@@ -76,6 +75,16 @@
+
+
+
@@ -83,4 +92,5 @@
-
\ No newline at end of file
+
+
From 8377c49706d456d24d011e5e5eac7a3f286019ce Mon Sep 17 00:00:00 2001
From: Unknown
Date: Fri, 8 Feb 2019 14:09:08 +0100
Subject: [PATCH 05/31] Added the activation mail sender
This sends a mail to the registered with an activation link
Needs a mail server to work
---
includes/email.php | 36 ++++++++++++++++++++++++++++++++++++
includes/user.php | 4 ++++
2 files changed, 40 insertions(+)
create mode 100644 includes/email.php
diff --git a/includes/email.php b/includes/email.php
new file mode 100644
index 0000000..889d74f
--- /dev/null
+++ b/includes/email.php
@@ -0,0 +1,36 @@
+
\ No newline at end of file
diff --git a/includes/user.php b/includes/user.php
index 1f6f89a..08732b8 100644
--- a/includes/user.php
+++ b/includes/user.php
@@ -255,8 +255,12 @@ public static function verify_new_user($username, $email, $password, $password_c
$user->joined = date("Y-m-d");
$user->verify_code = md5($username . microtime());
+ Email::sendActivationMail($email, $first_name);
+
$user->create();
+
+
}
return $error_array;
From 62b4490b98cfaecbbf31ef3a6905744919bb121e Mon Sep 17 00:00:00 2001
From: Unknown
Date: Fri, 8 Feb 2019 14:32:23 +0100
Subject: [PATCH 06/31] Added some comments to email.php and user.php
I also changed the name of the method send_ActivationMail
---
includes/email.php | 23 +++++++++++++++--------
includes/user.php | 2 +-
2 files changed, 16 insertions(+), 9 deletions(-)
diff --git a/includes/email.php b/includes/email.php
index 889d74f..2e3c7bb 100644
--- a/includes/email.php
+++ b/includes/email.php
@@ -1,22 +1,34 @@
\ No newline at end of file
diff --git a/includes/user.php b/includes/user.php
index 08732b8..73a1b3f 100644
--- a/includes/user.php
+++ b/includes/user.php
@@ -255,7 +255,7 @@ public static function verify_new_user($username, $email, $password, $password_c
$user->joined = date("Y-m-d");
$user->verify_code = md5($username . microtime());
- Email::sendActivationMail($email, $first_name);
+ Email::send_ActivationMail($email, $first_name);
$user->create();
From faeecdc7889e8fdd18d8a67df3ff19df47772e31 Mon Sep 17 00:00:00 2001
From: Unknown
Date: Fri, 8 Feb 2019 15:12:04 +0100
Subject: [PATCH 07/31] Added Hashing of stored password
The old users should not work anymore, you need to make new ones. The password stored in the database will now be hashed with password_hash, it will be checked up towards the users typed password with password_verify().
Changed things in verify_user() and verify_new_user()
Read about login security and will implement what I've learned in a new branch.
---
includes/user.php | 25 ++++++++++++++++---------
1 file changed, 16 insertions(+), 9 deletions(-)
diff --git a/includes/user.php b/includes/user.php
index 38b6e80..9f78ab5 100644
--- a/includes/user.php
+++ b/includes/user.php
@@ -27,20 +27,25 @@ public static function verify_user($email, $password) {
$sql = "SELECT * FROM " . self::$db_table . " WHERE ";
$sql .= "email = '{$email}' ";
- $sql .= "AND password = '{$password}' ";
$sql .= "LIMIT 1";
-
- /* ----------------------------- HASHED PASSORD SATT PÅ VENT TIL NÅ ------------------------------*/
+ // Sends the sql into the database, gets a array with the users back, only one because limit 1.
$the_result_array = self::find_by_query($sql);
- //$hashed_password = $the_result_array->password;
- //$password = password_verify($password, $hashed_password);
-
+ // Checks if the collected array is empty or not.
if (!empty($the_result_array)) {
- // Array shif delivers the first
- return array_shift($the_result_array);
+ // Collects the hashed password from the array that was collected by the sql.
+ $hashed_password = $the_result_array[0]->password;
+
+ // Checks here where if the hashed password fits to the password that have been inserted by user.
+ if (password_verify($password, $hashed_password)) {
+
+ // Array shift delivers the one in place 0.
+ return array_shift($the_result_array);
+ }
+
+ return false;
} else {
return false;
@@ -172,7 +177,7 @@ public static function verify_new_user($username, $email, $password, $password_c
global $database;
- //Creates the error array, error messages will be pushed into this, and
+ //Creates the error array, error messages will be pushed into this, and showed on the register page.
$error_array = array();
$username = $database->escape_string($username);
$email = $database->escape_string($email);
@@ -197,6 +202,7 @@ public static function verify_new_user($username, $email, $password, $password_c
$sql .= "username = '{$username}' ";
$sql .= "LIMIT 1";
$the_result_array = self::find_by_query($sql);
+
if (!empty($the_result_array)) {
array_push($error_array, "The username is already in use, pick something else!");
}
@@ -232,6 +238,7 @@ public static function verify_new_user($username, $email, $password, $password_c
array_push($error_array, "Your password must be between 5 and 30 characters");
}
+ $password = password_hash($password, PASSWORD_DEFAULT);
//Check password - bruker check_password til å sjekke om et passord fungerer, kommer til å tilkalle verify_password.
if (empty($error_array)) {
From f738fdbf48a0a6a6d7908f562059f4e561188f1b Mon Sep 17 00:00:00 2001
From: Daniel
Date: Sat, 9 Feb 2019 00:31:21 +0100
Subject: [PATCH 08/31] Added search-for-friend list and security changes
The ability for users to search for people to add as friends now lies in the profile page, it will of course be heavily modified later when it added to the front-end. Did some security changes, removed the block for special characters, real_escape_string helps stopping SQL-injections, changed max characters to 50 from 30, and added call on escape_string some places. Created friend_search stat is used when the feature is used, and placed ajax on the list and button.
---
includes/add_friend.php | 24 ++++++-------
includes/friend_search.php | 56 +++++++++++++++++++++++++++++++
includes/self_profile_content.php | 15 +++++++++
includes/user.php | 33 +++++++++++++-----
js/functions.js | 28 +++++++++++++++-
5 files changed, 133 insertions(+), 23 deletions(-)
create mode 100644 includes/friend_search.php
diff --git a/includes/add_friend.php b/includes/add_friend.php
index bf8a788..43c5388 100644
--- a/includes/add_friend.php
+++ b/includes/add_friend.php
@@ -1,22 +1,20 @@
+
-
+
-
-is_signed_in()) {redirect("login.php");} ?>
+if (!User::is_friend($_GET['i'], $_GET['o'])) {
+ $user = User::add_friend($_GET['i'], $_GET['o']);
+}
-user_id, $_GET['id']);
+echo "";
-redirect("../users.php");
?>
\ No newline at end of file
diff --git a/includes/friend_search.php b/includes/friend_search.php
new file mode 100644
index 0000000..1ebed22
--- /dev/null
+++ b/includes/friend_search.php
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ username; ?>
+
+ user_id, $user->id)) { ?>
+
+
+
+ Add Friend
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/includes/self_profile_content.php b/includes/self_profile_content.php
index 354a6fc..f012b74 100644
--- a/includes/self_profile_content.php
+++ b/includes/self_profile_content.php
@@ -1,3 +1,4 @@
+
username . ", but there is little for you to do here at the moment.";
?>
+
+
+
+Add Friend Function
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/includes/user.php b/includes/user.php
index 9f78ab5..fa51249 100644
--- a/includes/user.php
+++ b/includes/user.php
@@ -79,7 +79,6 @@ public static function add_friend($user_id, $friend_id) {
$sql = "INSERT INTO friend_list(user_1, user_2, status)";
$sql .= "VALUES ('{$user_id}', '{$friend_id}', '{$status}')";
-
if ($database->query($sql)) {
return true;
@@ -92,12 +91,33 @@ public static function add_friend($user_id, $friend_id) {
}
+ // The search function for users.
+ public function find_friend($search) {
+
+ global $database;
+
+ if ($search !== "") {
+
+ $sql = "SELECT * FROM users WHERE ";
+ $search = $database->escape_string($search);
+ $sql .= " username LIKE '%{$search}%' ";
+ return self::find_by_query($sql);
+ }
+
+ }
+
+
// The search function for users.
public function find_user($search, $category) {
+ global $database;
+
// Adds things to the search with.
$sql = "SELECT * FROM users WHERE ";
+ $search = $database->escape_string($search);
+ $category = $database->escape_string($category);
+
if ($category == 'all') {
$sql .= " first_name LIKE '%{$search}%' OR";
$sql .= " middle_name LIKE '%{$search}%' OR";
@@ -202,7 +222,7 @@ public static function verify_new_user($username, $email, $password, $password_c
$sql .= "username = '{$username}' ";
$sql .= "LIMIT 1";
$the_result_array = self::find_by_query($sql);
-
+
if (!empty($the_result_array)) {
array_push($error_array, "The username is already in use, pick something else!");
}
@@ -227,15 +247,10 @@ public static function verify_new_user($username, $email, $password, $password_c
if($password != $password_check) {
array_push($error_array, "Your passwords do not match");
}
-
- /*Error message: If the passwords contain other than numbers and letters.*/
- if(preg_match('/[^A-Za-z0-9]/', $password)) {
- array_push($error_array, "Your password can only contain english characters or numbers");
- }
/*Error message: If the password is not between 5 and 30 characters long.*/
- if((strlen($password) > 30) || strlen($password) < 5) {
- array_push($error_array, "Your password must be between 5 and 30 characters");
+ if((strlen($password) > 50) || strlen($password) < 5) {
+ array_push($error_array, "Your password must be between 5 and 50 characters");
}
$password = password_hash($password, PASSWORD_DEFAULT);
diff --git a/js/functions.js b/js/functions.js
index 1dc2695..e15da0d 100644
--- a/js/functions.js
+++ b/js/functions.js
@@ -54,4 +54,30 @@ function update_gamelist() {
xmlhttp.open("GET","includes/gamelist.php?s="+search+"&c="+category+"&g="+genre,true);
xmlhttp.send();
-}
\ No newline at end of file
+}
+
+function find_friend() {
+
+ var search = document.getElementById("search").value;
+
+ xmlhttp = new XMLHttpRequest();
+ xmlhttp.onreadystatechange = function() {
+ document.getElementById("friend_search").innerHTML = this.responseText;
+ };
+
+ xmlhttp.open("GET","includes/friend_search.php?s="+search,true);
+ xmlhttp.send();
+
+}
+
+function send_friend_request(user_id, other_id) {
+
+ xmlhttp = new XMLHttpRequest();
+ xmlhttp.onreadystatechange = function() {
+ document.getElementById("send_friend_request").innerHTML = this.responseText;
+ };
+
+ xmlhttp.open("GET","includes/add_friend.php?i="+user_id+"&o="+other_id,true);
+ xmlhttp.send();
+
+}
From 882d7430efef261f28d9a43c75f0ccdbe45b2021 Mon Sep 17 00:00:00 2001
From: Daniel
Date: Sun, 10 Feb 2019 22:41:40 +0100
Subject: [PATCH 09/31] Added some work on show friend-requests
The work is not near complete, looked for more security changes, but will finish the show messages list function and accept/decline friend request function. Lots of ways to make functions more abstract. I try to do it with the accept/decline function.
---
includes/add_friend.php | 8 +---
includes/friend_search.php | 1 +
includes/handle_friend_request.php | 16 ++++++++
includes/message_list.php | 62 ++++++++++++++++++++++++++++++
includes/self_profile_content.php | 11 +++++-
includes/user.php | 10 ++++-
js/functions.js | 31 +++++++++++++++
7 files changed, 130 insertions(+), 9 deletions(-)
create mode 100644 includes/handle_friend_request.php
create mode 100644 includes/message_list.php
diff --git a/includes/add_friend.php b/includes/add_friend.php
index 43c5388..601f808 100644
--- a/includes/add_friend.php
+++ b/includes/add_friend.php
@@ -1,6 +1,5 @@
find_friend();";
-
-
-?>
\ No newline at end of file
+?>
diff --git a/includes/friend_search.php b/includes/friend_search.php
index 1ebed22..59dd987 100644
--- a/includes/friend_search.php
+++ b/includes/friend_search.php
@@ -40,6 +40,7 @@
user_id, $user->id)) { ?>
+
Add Friend
diff --git a/includes/handle_friend_request.php b/includes/handle_friend_request.php
new file mode 100644
index 0000000..be0e3cd
--- /dev/null
+++ b/includes/handle_friend_request.php
@@ -0,0 +1,16 @@
+
+
+
diff --git a/includes/message_list.php b/includes/message_list.php
new file mode 100644
index 0000000..3c36a47
--- /dev/null
+++ b/includes/message_list.php
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/includes/self_profile_content.php b/includes/self_profile_content.php
index f012b74..2744db5 100644
--- a/includes/self_profile_content.php
+++ b/includes/self_profile_content.php
@@ -1,7 +1,6 @@
+
Add Friend Function
+
+------------------------------------------------------------------------------------
+
+
+
+
+
\ No newline at end of file
diff --git a/includes/user.php b/includes/user.php
index fa51249..f923b0b 100644
--- a/includes/user.php
+++ b/includes/user.php
@@ -91,7 +91,7 @@ public static function add_friend($user_id, $friend_id) {
}
- // The search function for users.
+ // The search function for users, uses when they look trough the list to add to friends.
public function find_friend($search) {
global $database;
@@ -148,6 +148,12 @@ public function find_user($search, $category) {
return self::find_by_query($sql);
}
+
+ public static function find_messages() {
+
+ }
+
+
// checks if the user is an admin or not.
public static function is_admin($user_id) {
@@ -163,7 +169,7 @@ public static function is_admin($user_id) {
return !empty($the_result_array) ? true : false;
}
- // checks if the user is an admin or not.
+ // checks if the user is an friend or not.
public static function is_friend($user_id, $friend_id) {
global $database;
diff --git a/js/functions.js b/js/functions.js
index e15da0d..2c8d431 100644
--- a/js/functions.js
+++ b/js/functions.js
@@ -81,3 +81,34 @@ function send_friend_request(user_id, other_id) {
xmlhttp.send();
}
+
+//Shows all the message, friend-requests and others.
+function find_messages() {
+
+ var search = document.getElementById("search").value;
+
+ xmlhttp = new XMLHttpRequest();
+ xmlhttp.onreadystatechange = function() {
+ document.getElementById("friend_search").innerHTML = this.responseText;
+ };
+
+ xmlhttp.open("GET","includes/friend_search.php?s="+search,true);
+ xmlhttp.send();
+
+}
+
+//Accept one of the friend request when the user accept, changed the friend_list status to 1.
+function handle_friend_request(user_id, other_id, act) {
+
+ //Act is 0 if declined and 1 if accepted.
+
+ xmlhttp = new XMLHttpRequest();
+ xmlhttp.onreadystatechange = function() {
+ document.getElementById("handle_friend_request").innerHTML = this.responseText;
+ };
+
+ xmlhttp.open("GET","includes/handle_friend_request.php?i="+user_id+"&o="+other_id,true);
+ xmlhttp.send();
+
+}
+
From 356e7fd94a071f1fc60d63986ce9565a6ee2a7c7 Mon Sep 17 00:00:00 2001
From: Daniel
Date: Mon, 11 Feb 2019 17:36:41 +0100
Subject: [PATCH 10/31] Added some more work on the friend function
It can now accept the requests other might have sent to a user with a button on the profile-page, decline option will be added soon, together with fixes and check-overs. Made a new class named friendship, find something better later.
---
includes/friendship.php | 54 ++++++++++++++++++++++++++++++
includes/handle_friend_request.php | 16 ++++-----
includes/init.php | 1 +
includes/message_list.php | 38 ++++++---------------
includes/user.php | 5 ---
js/functions.js | 19 ++---------
6 files changed, 74 insertions(+), 59 deletions(-)
create mode 100644 includes/friendship.php
diff --git a/includes/friendship.php b/includes/friendship.php
new file mode 100644
index 0000000..d25f4aa
--- /dev/null
+++ b/includes/friendship.php
@@ -0,0 +1,54 @@
+user_1 = $user_1;
+ $friendship->user_2 = $user_2;
+ $friendship->status = $status;
+ $friendship->id = $id;
+
+ $friendship->update();
+
+ }
+
+}
+
+?>
\ No newline at end of file
diff --git a/includes/handle_friend_request.php b/includes/handle_friend_request.php
index be0e3cd..023ec35 100644
--- a/includes/handle_friend_request.php
+++ b/includes/handle_friend_request.php
@@ -2,15 +2,13 @@
This accepts or deletes a friend-request depending on the last _get.
-->
-
+
diff --git a/includes/init.php b/includes/init.php
index dbc41aa..071ccb3 100644
--- a/includes/init.php
+++ b/includes/init.php
@@ -16,6 +16,7 @@
require_once("session.php");// Kontroll over nåværende session.
require_once("achievement.php"); // Funksjoner som er utenfor klasser.
require_once("rating.php"); // Klassen som omhandler ratings.
+require_once("friendship.php"); // Klassen som omhandler ratings.
//Place paths later on here.
?>
\ No newline at end of file
diff --git a/includes/message_list.php b/includes/message_list.php
index 3c36a47..df4500b 100644
--- a/includes/message_list.php
+++ b/includes/message_list.php
@@ -6,57 +6,39 @@
user_id);
?>
\ No newline at end of file
diff --git a/includes/user.php b/includes/user.php
index f923b0b..80ed6f1 100644
--- a/includes/user.php
+++ b/includes/user.php
@@ -149,11 +149,6 @@ public function find_user($search, $category) {
}
- public static function find_messages() {
-
- }
-
-
// checks if the user is an admin or not.
public static function is_admin($user_id) {
diff --git a/js/functions.js b/js/functions.js
index 2c8d431..788fedf 100644
--- a/js/functions.js
+++ b/js/functions.js
@@ -82,23 +82,8 @@ function send_friend_request(user_id, other_id) {
}
-//Shows all the message, friend-requests and others.
-function find_messages() {
-
- var search = document.getElementById("search").value;
-
- xmlhttp = new XMLHttpRequest();
- xmlhttp.onreadystatechange = function() {
- document.getElementById("friend_search").innerHTML = this.responseText;
- };
-
- xmlhttp.open("GET","includes/friend_search.php?s="+search,true);
- xmlhttp.send();
-
-}
-
//Accept one of the friend request when the user accept, changed the friend_list status to 1.
-function handle_friend_request(user_id, other_id, act) {
+function handle_friend_request(user_id, other_id, id, act) {
//Act is 0 if declined and 1 if accepted.
@@ -107,7 +92,7 @@ function handle_friend_request(user_id, other_id, act) {
document.getElementById("handle_friend_request").innerHTML = this.responseText;
};
- xmlhttp.open("GET","includes/handle_friend_request.php?i="+user_id+"&o="+other_id,true);
+ xmlhttp.open("GET","includes/handle_friend_request.php?ui="+user_id+"&oi="+other_id+"&a="+act+"&id="+id,true);
xmlhttp.send();
}
From 977780a7e50e5261bb55565158c174a8cc7581df Mon Sep 17 00:00:00 2001
From: Daniel
Date: Tue, 12 Feb 2019 14:36:36 +0100
Subject: [PATCH 11/31] Added accept and decline friend request
Fixed delete() by adding $session, as it uses it. Added some messages to better explain some of the pages. Added two buttons where the user can accept and decline friend-requests, but at the moment first object on the list will be updated , even trough it will work correctly in the back-end. Removed unnecessary call to the database in the friend_request_handler() . Changed the friend_request_handler.php to add a message to the user when updated. Added on the search-words in friend-search and the user-list.
---
includes/add_friend.php | 13 ++++----
includes/db_object.php | 5 +--
includes/friend_search.php | 34 +++++++++++++++++----
includes/friendship.php | 16 +++++-----
includes/handle_friend_request.php | 9 +++++-
includes/message_list.php | 28 ++++++++---------
includes/user.php | 14 +++------
includes/userlist.php | 49 +++++++++++++++++++++++++++---
8 files changed, 117 insertions(+), 51 deletions(-)
diff --git a/includes/add_friend.php b/includes/add_friend.php
index 601f808..017467a 100644
--- a/includes/add_friend.php
+++ b/includes/add_friend.php
@@ -2,15 +2,14 @@
This sends a friend request into the database.
-->
-
-if (!User::is_friend($_GET['i'], $_GET['o'])) {
- $user = User::add_friend($_GET['i'], $_GET['o']);
-}
+
diff --git a/includes/db_object.php b/includes/db_object.php
index 2e93726..0cd4dc6 100644
--- a/includes/db_object.php
+++ b/includes/db_object.php
@@ -186,7 +186,6 @@ public function create() {
}
-
//Oppdaterer et objekt
public function update() {
@@ -219,14 +218,16 @@ public function update() {
public function delete() {
+
global $database;
+ global $session;
$sql = "DELETE FROM " . static::$db_table . " WHERE id= " . $database->escape_string($this->id);
$sql .= " LIMIT 1";
$database->query($sql);
- //Logs the creation of a object in the user activity-table on the database.
+ //Logs the creation of a object in the user activity-table on the database, adds the database-table that it belongs to.
$log = $this->log_user_activity("delete", $session->user_id, $this->id, static::$db_table);
//If the affected rows equal one, then...
diff --git a/includes/friend_search.php b/includes/friend_search.php
index 59dd987..e93da56 100644
--- a/includes/friend_search.php
+++ b/includes/friend_search.php
@@ -1,4 +1,12 @@
-
+
-
+
- username; ?>
+
+
+ username);
+
+ // Switches out what is searched with the same with marks around it.
+ echo str_replace($search, '' . $search . ' ', $username);
+
+ ?>
+
+
+
user_id, $user->id)) { ?>
@@ -52,6 +74,6 @@
+ }
+ } ?>
\ No newline at end of file
diff --git a/includes/friendship.php b/includes/friendship.php
index d25f4aa..8d5ac5f 100644
--- a/includes/friendship.php
+++ b/includes/friendship.php
@@ -27,25 +27,25 @@ public static function find_friend_requests($user_id) {
}
+ // Will accept or decline depending on the $status is 1 or 0.
public function friend_request_handler($user_1, $user_2, $status, $id) {
global $database;
global $session;
- $sql = "SELECT * FROM friend_list WHERE ";
- $sql .= "user_1 = '{$user_1}' ";
- $sql .= "AND user_2 = '{$user_2}' ";
- $sql .= "LIMIT 1";
-
- $the_result_array = self::find_by_query($sql);
-
$friendship = new Friendship();
$friendship->user_1 = $user_1;
$friendship->user_2 = $user_2;
$friendship->status = $status;
$friendship->id = $id;
- $friendship->update();
+ if ($status == 1) {
+
+ $friendship->update();
+ } else {
+
+ $friendship->delete();
+ }
}
diff --git a/includes/handle_friend_request.php b/includes/handle_friend_request.php
index 023ec35..342b74f 100644
--- a/includes/handle_friend_request.php
+++ b/includes/handle_friend_request.php
@@ -1,5 +1,6 @@
@@ -8,7 +9,13 @@
$user_1 = $_GET['ui'];
$user_2 = $_GET['oi'];
$status = $_GET['a'];
- $id = $_GET['id'];
+ $id = $_GET['id'];
Friendship::friend_request_handler($user_1, $user_2, $status, $id);
+
+ if ($status == 1) {
+ echo "Friendship accepted!";
+ } else {
+ echo "Friendship rejected!";
+ }
?>
diff --git a/includes/message_list.php b/includes/message_list.php
index df4500b..f790f14 100644
--- a/includes/message_list.php
+++ b/includes/message_list.php
@@ -1,14 +1,9 @@
-
+
user_id);
?>
@@ -20,25 +15,30 @@
// Places here in the number of users that you decide at the end of this foreach.
$i= 0;
- foreach ($requests as $request) { ?>
+ foreach ($requests as $request) {
+
+ // Collects all the information of the user that sent the request
+ $user = User::find_by_id($request->user_1);
+
+ ?>
- id; ?> Wants to become your friend!
+ username; ?> Wants to become your friend!
Accept
-
+ Decline
-
+
\ No newline at end of file
diff --git a/includes/user.php b/includes/user.php
index 80ed6f1..6aac88e 100644
--- a/includes/user.php
+++ b/includes/user.php
@@ -62,13 +62,14 @@ public static function verify_update($first_name, $middle_name, $last_name) {
$middle_name = $database->escape_string($middle_name);
$last_name = $database->escape_string($last_name);
- if(strlen($first_name ) > 30 || strlen($middle_name) > 30 || strlen($last_name) > 30) {
+ if(strlen($first_name) > 30 || strlen($middle_name) > 30 || strlen($last_name) > 30) {
array_push($error_array, "The firstname, middlename or last name cant be longer than 30 characters each.");
}
return $error_array;
}
+ //
public static function add_friend($user_id, $friend_id) {
global $database;
@@ -91,7 +92,7 @@ public static function add_friend($user_id, $friend_id) {
}
- // The search function for users, uses when they look trough the list to add to friends.
+ // The search function for users, uses when they look trough the list to add to friends.
public function find_friend($search) {
global $database;
@@ -188,13 +189,11 @@ public function get_user_image() {
}
// Verifiserer at brukeren ligger i databasen, brukes ved llogin og kan brukes andre steder.
- // Kan kuttes opp senere.
public static function verify_new_user($username, $email, $password, $password_check, $first_name, $middle_name, $last_name) {
- /*
- * Legger feilmeldinger inn i error_array, error arrayet sendes så tilbake.
+ /* Legger feilmeldinger inn i error_array, error arrayet sendes så tilbake.
* Hvis det er felmeldinger vil ikke brukeren bli laget, og feilmeldingene vil vises.
- */
+ */
global $database;
@@ -264,9 +263,6 @@ public static function verify_new_user($username, $email, $password, $password_c
//sets up the new user and creates it with create();
$user = new user();
- /*------------------------------------ Skal brukes når hashet passord settes opp --------------------------------------------*/
- //$password = password_hash($password, PASSWORD_BCRYPT);
-
$user->username = $username;
$user->email = $email;
$user->password = $password;
diff --git a/includes/userlist.php b/includes/userlist.php
index ba9913b..acd69e7 100644
--- a/includes/userlist.php
+++ b/includes/userlist.php
@@ -1,4 +1,7 @@
-
+
- username; ?>
+
+
+ username);
+
+ // Switches out what is searched with the same with marks around it.
+ echo str_replace($search, '' . $search . ' ', $username);
+
+ ?>
+
+
+
+
+
+ first_name);
+
+ // Switches out what is searched with the same with marks around it.
+ echo str_replace($search, '' . $search . ' ', $first_name);
+
+ ?>
+
+
+
+
+
+ last_name);
+
+ // Switches out what is searched with the same with marks around it.
+ echo str_replace($search, '' . $search . ' ', $last_name);
+
+ ?>
+
+
- first_name; ?>
- last_name; ?>
joined; ?>
Delete
From a9632104928e8e90e12b87a7dcc5c9d53592652b Mon Sep 17 00:00:00 2001
From: Daniel
Date: Thu, 14 Feb 2019 21:58:26 +0100
Subject: [PATCH 12/31] Added fuction that makes string of characters
Lies in user and is used to add a string of random characters at the end of the username when it is created. Can be abstracted later to work with the code that is sent out to check email.
---
includes/user.php | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/includes/user.php b/includes/user.php
index 6aac88e..563f8a1 100644
--- a/includes/user.php
+++ b/includes/user.php
@@ -260,6 +260,11 @@ public static function verify_new_user($username, $email, $password, $password_c
//Check username - bruker check_username til å sjekke om brukernavnet fungerer.
+
+ // Creates here the uinqe string that will be added to the username.
+ $user_id_str = User::create_unique_id();
+ $username .= $user_id_str;
+
//sets up the new user and creates it with create();
$user = new user();
@@ -279,6 +284,19 @@ public static function verify_new_user($username, $email, $password, $password_c
return $error_array;
}
+
+ // Function that creates the string that has to be added behind the username.
+ public static function create_unique_id($length = 5) {
+ $string = "#";
+ $characters = array_merge(range('A','Z'), range('a','z'), range('0','9'));
+ $max = count($characters) - 1;
+
+ for ($i = 0; $i < $length; $i++) {
+ $random = mt_rand(0, $max);
+ $string .= $characters[$random];
+ }
+ return $string;
+ }
}
?>
\ No newline at end of file
From aa9bbbcba95e84b1b1b37cf3d579013cf955625a Mon Sep 17 00:00:00 2001
From: Daniel
Date: Fri, 8 Mar 2019 09:34:55 +0100
Subject: [PATCH 13/31] Added phpdoc for methods and elsewhere
---
gamepage.php | 18 +++++++++++--
includes/achievement.php | 15 ++++++-----
includes/friend_search.php | 6 +++--
includes/friendship.php | 20 ++++++++++++---
includes/game.php | 52 ++++++++++++++++++++++++++++++++------
includes/init.php | 15 +++++++----
includes/message_list.php | 15 ++++++++---
includes/rate_game.php | 8 +++++-
includes/user.php | 49 ++++++++++++++++++++++++++++++-----
9 files changed, 160 insertions(+), 38 deletions(-)
diff --git a/gamepage.php b/gamepage.php
index 4d50469..afa898f 100644
--- a/gamepage.php
+++ b/gamepage.php
@@ -1,4 +1,13 @@
-
+
+
+
+
\ No newline at end of file
diff --git a/includes/achievement.php b/includes/achievement.php
index 3c43026..28557c8 100644
--- a/includes/achievement.php
+++ b/includes/achievement.php
@@ -13,12 +13,15 @@ class Achievement extends Db_object{
public $user_id;
public $gained;
- // Denne skal lage et achivement-objekt som så skal sendes inn til databasen.
- // Objektet skal være satt sammen med rader fra både users og achievements.
- // Skal kunne kalles på inne i spill hvis en viss handling skal skje.
- // Feks: alle ball-objekter blir spist av en spillerstyrt slange.
- // Kallet blir da noe alla: verify_achivement($user_id, $achivement_id);
-
+ /**
+ * Denne skal lage et achivement-objekt som så skal sendes inn til databasen.
+ * Objektet skal være satt sammen med rader fra både users og achievements.
+ * Skal kunne kalles på inne i spill hvis en viss handling skal skje.
+ * Feks: alle ball-objekter blir spist av en spillerstyrt slange.
+ * Kallet blir da noe alla: verify_achivement($user_id, $achivement_id);
+ *
+ * @param $achievement_id will be the id thats bind the user together to the achievement.
+ */
public function verify_gained_achivement($achievement_id) {
global $session;
diff --git a/includes/friend_search.php b/includes/friend_search.php
index e93da56..03fcd73 100644
--- a/includes/friend_search.php
+++ b/includes/friend_search.php
@@ -1,7 +1,7 @@
+
@@ -58,7 +60,7 @@
-
+
user_id, $user->id)) { ?>
diff --git a/includes/friendship.php b/includes/friendship.php
index 8d5ac5f..7b47f8c 100644
--- a/includes/friendship.php
+++ b/includes/friendship.php
@@ -13,8 +13,12 @@ class Friendship extends Db_object{
public $user_2;
public $status;
-
- // Finds all the friend requests sent to the user that is not answered before by the user.
+ /**
+ * Finds all the friend requests sent to the user that is not answered before by the user.
+ *
+ * @param Is the id of the reciever you want the friend requests to.
+ * @return Is the friend requests that is sent to the id in param.
+ */
public static function find_friend_requests($user_id) {
global $database;
@@ -27,7 +31,17 @@ public static function find_friend_requests($user_id) {
}
- // Will accept or decline depending on the $status is 1 or 0.
+ /**
+ * Will here accept or decline depending on wheter the input-param $status
+ * is 1 or 0, if it is 1 then it will be accepted and the row in the database
+ * will be updated to say so.
+ *
+ * @param $user_1 is the user that sent the friend-request
+ * @param $user_2 is the user that recieved the request, and have now accepted or refused.
+ * @param $status is either 1 for accept or 0 for refuse friend-request.
+ * @param $id is the id of the request, will use this to update.
+ * @return true if the process was finished and false if there was errors.
+ */
public function friend_request_handler($user_1, $user_2, $status, $id) {
global $database;
diff --git a/includes/game.php b/includes/game.php
index f565957..88fc1a8 100644
--- a/includes/game.php
+++ b/includes/game.php
@@ -34,7 +34,15 @@ class Game extends Db_object {
);
- // får $_FILES['uploaded_file'] som et argument($file), sets up the file.
+
+ /**
+ * Gets the file as an argument and then does what it needs to do to it.
+ * Checks if the file is empty or if there is an error, makes agame if all
+ * is okay.
+ *
+ * @param $file the file that information will be collected from.
+ * @return True if all OK, false if error.
+ */
public function set_file($file) {
// If file is empty, if there is no file, if type is notr array.
@@ -52,24 +60,36 @@ public function set_file($file) {
$this->filename = substr($this->foldername, 0, -3) . "php"; // kutter av zip og legger til php på der canvas ligger.
$this->tmp_path = $file['tmp_name'];
$this->size = $file['size'];
-
+ return true;
}
}
-
- // Collects the placement of the game path, used when showing the picture at gameslist.
+
+ /**
+ * Collects the placement of the game path, used when the game is called.
+ *
+ * @return the path to the games-folder where the main js is stored.
+ */
public function game_path() {
return $this->upload_directory . DS . $this->foldername . DS . $this->filename;
}
- // Collects the placement of the game path, used when showing the picture at gameslist.
+ /**
+ * Collects the placement of the game path, used when showing the picture at gameslist.
+ *
+ * @return the path to the games-folder where the image id stored.
+ */
public function game_image_path() {
return $this->upload_directory . DS . $this->foldername . DS . "image.png";
}
- // Saves a game-object that has been made, the files and database-information.
- // Also does a lot of error checking.
+ /**
+ * Stores a game object that have been made, and the database object for it.
+ * It also does a lot of error-checking when it does so.
+ *
+ * @return true if the process was finished and false if there was errors.
+ */
public function save() {
//Checks if this has a game_id, if it has the game will be updated instead.
@@ -126,7 +146,16 @@ public function save() {
}
}
-
+ /**
+ * Uses the player-choosen category, genre and input search to
+ * look trough all the games stored in the database, to then
+ * collect all that fits.
+ *
+ * @param $category is what the user wants to search in, like title or creator.
+ * @param $genre is the genre of game you want to search trough.
+ * @param $search is the input that the user have written in the form.
+ * @return the list of games that fits to the search.
+ */
public function find_game($category, $genre, $search) {
$sql = "SELECT * FROM games WHERE ";
@@ -144,6 +173,13 @@ public function find_game($category, $genre, $search) {
return self::find_by_query($sql);
}
+ /**
+ * Collects the average score from one of the games based on the game id,
+ * then sends it back after making sure that the number format is a double
+ * with two decimals.
+ *
+ * @return The average score of the game with two decimals.
+ */
public function get_rating() {
global $database;
diff --git a/includes/init.php b/includes/init.php
index 071ccb3..0cf35c7 100644
--- a/includes/init.php
+++ b/includes/init.php
@@ -1,11 +1,16 @@
\ No newline at end of file
diff --git a/includes/message_list.php b/includes/message_list.php
index f790f14..b723ed8 100644
--- a/includes/message_list.php
+++ b/includes/message_list.php
@@ -1,9 +1,14 @@
-
+
+include("init.php"); ?>
user_id);
?>
@@ -29,8 +34,10 @@
- Accept
- Decline
+ Accept
+ Decline
diff --git a/includes/rate_game.php b/includes/rate_game.php
index 80fc1a8..97a0ba9 100644
--- a/includes/rate_game.php
+++ b/includes/rate_game.php
@@ -1,4 +1,10 @@
-
+
Date: Fri, 8 Mar 2019 15:54:56 +0100
Subject: [PATCH 14/31] Added the activate link to the mail
I have added the link to the email that gets sent out when a new user has signed up
---
activate.php | 12 ++++++++++++
includes/email.php | 7 ++++---
includes/user.php | 4 ++--
3 files changed, 18 insertions(+), 5 deletions(-)
create mode 100644 activate.php
diff --git a/activate.php b/activate.php
new file mode 100644
index 0000000..46f650d
--- /dev/null
+++ b/activate.php
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/includes/email.php b/includes/email.php
index 2e3c7bb..f7519b2 100644
--- a/includes/email.php
+++ b/includes/email.php
@@ -23,16 +23,17 @@ public static function mail_Sender($to, $subject, $txt){
/*
To do
- * Legge til aktiveringslink
+ * Legge til aktiveringslink : Doneish, trenger formatering
* Sjekke om denne er klikket på
* Deretter aktivere konto.
+
*/
- public static function send_ActivationMail($to, $first_name){
+ public static function send_ActivationMail($to, $first_name, $verify_code ){
$subject = "Hello " . $first_name . " Please activate your account at CM Games";
- $txt = "Please press the link below to acitvate your new account at CM Games" . " http://localhost/gamesite/activate.php=". "somenumbers";
+ $txt = "Please press the link below to activate your new account at CM Games " . "http://localhost/gamesite/activate.php?=" . $verify_code . " Thank you for registering. ";
self::mail_sender($to, $subject, $txt);
diff --git a/includes/user.php b/includes/user.php
index 73a1b3f..53c83e5 100644
--- a/includes/user.php
+++ b/includes/user.php
@@ -253,9 +253,9 @@ public static function verify_new_user($username, $email, $password, $password_c
$user->last_name = $last_name;
$user->user_image = "1.png";
$user->joined = date("Y-m-d");
- $user->verify_code = md5($username . microtime());
+ $user->verify_code = md5($username .microtime());
- Email::send_ActivationMail($email, $first_name);
+ Email::send_ActivationMail($user->$email, $user->first_name, $user->verify_code );
$user->create();
From 101886944151175f3375842e38170baab30518d3 Mon Sep 17 00:00:00 2001
From: Daniel
Date: Sun, 10 Mar 2019 17:06:32 +0100
Subject: [PATCH 15/31] Started working on the userchat and fixed rating
Added some parts of it into the index-content, created a class called Message for now, collects and shows the rows in the database inside of the square, updates it every 300 milliseconds, calls on read_chat.php and write_chat.php when they collect or write from the database.
Need to do:
- Comments and doc
- clean up and decide better names
- make it look prettier
- make it more usable
- only a set amount of messages
- multiple rooms
- css file properly sat up
- more
---
css/main.css | 51 +++++++++++++++
gamepage.php | 7 +--
gamesite_db.sql | 123 ++++++++++++++++++++++++++++++-------
includes/index_content.php | 19 ++++++
includes/init.php | 1 +
includes/message.php | 21 +++++++
includes/read_chat.php | 18 ++++++
includes/write_chat.php | 17 +++++
js/chat.js | 36 +++++++++++
js/functions.js | 5 ++
10 files changed, 271 insertions(+), 27 deletions(-)
create mode 100644 includes/message.php
create mode 100644 includes/read_chat.php
create mode 100644 includes/write_chat.php
create mode 100644 js/chat.js
diff --git a/css/main.css b/css/main.css
index c95865b..61d8a58 100644
--- a/css/main.css
+++ b/css/main.css
@@ -400,3 +400,54 @@ body {
display: table; }
/*# sourceMappingURL=main.css.map */
+
+
+/*
+ * Added the part for the chat after this needs to be changed/replaced/fixed
+ */
+
+ *,
+ *:before,
+ *:after {
+ box-sizing: inherit;
+}
+
+/*Chat styling*/
+.chatcontainer {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+
+.userSettings {
+ margin-bottom: 20px;
+}
+
+.chat {
+ max-width: 400px;
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+}
+
+.chat #chatOutput {
+ overflow-y: scroll;
+ height: 280px;
+ width: 100%;
+ border: 1px solid #777;
+}
+
+.chat #chatOutput p {
+ margin: 0;
+ padding: 5px;
+ border-bottom: 1px solid #bbb;
+ word-break: break-all;
+}
+
+.chat #chatInput {
+ width: 75%;
+}
+
+.chat #chatSend {
+ width: 25%;
+}
\ No newline at end of file
diff --git a/gamepage.php b/gamepage.php
index afa898f..a3c3cde 100644
--- a/gamepage.php
+++ b/gamepage.php
@@ -9,6 +9,7 @@
include("includes/header.php"); ?>
+
game_path());
}
?>
+
+
-
-
\ No newline at end of file
diff --git a/gamesite_db.sql b/gamesite_db.sql
index d5c6804..7d2db56 100644
--- a/gamesite_db.sql
+++ b/gamesite_db.sql
@@ -1,11 +1,11 @@
-- phpMyAdmin SQL Dump
--- version 4.8.3
+-- version 4.7.4
-- https://www.phpmyadmin.net/
--
-- Host: 127.0.0.1
--- Generation Time: 28. Jan, 2019 23:27 PM
--- Tjener-versjon: 10.1.35-MariaDB
--- PHP Version: 7.2.9
+-- Generation Time: 10. Mar, 2019 16:57 PM
+-- Server-versjon: 10.1.29-MariaDB
+-- PHP Version: 7.2.0
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
@@ -50,7 +50,12 @@ CREATE TABLE `friend_list` (
--
INSERT INTO `friend_list` (`id`, `user_1`, `user_2`, `status`) VALUES
-(28, 2, 1, 0);
+(94, 1, 2, 1),
+(95, 1, 13, 1),
+(96, 1, 12, 1),
+(98, 1, 3, 1),
+(100, 1, 1, 1),
+(101, 1, 16, 0);
-- --------------------------------------------------------
@@ -104,6 +109,19 @@ CREATE TABLE `ratings` (
`score` int(5) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+--
+-- Dataark for tabell `ratings`
+--
+
+INSERT INTO `ratings` (`id`, `game_id`, `user_id`, `score`) VALUES
+(11, 1, 1, 2),
+(12, 2, 1, 5),
+(14, 3, 1, 4),
+(15, 4, 1, 5),
+(16, 1, 3, 4),
+(17, 2, 3, 2),
+(18, 4, 3, 4);
+
-- --------------------------------------------------------
--
@@ -128,9 +146,15 @@ CREATE TABLE `users` (
--
INSERT INTO `users` (`id`, `email`, `username`, `password`, `first_name`, `middle_name`, `last_name`, `user_image`, `joined`, `privilege_level`) VALUES
-(1, 'hehe@willi.no', 'WilliWonka', 'qwerty', 'Willy', 'Wonka', 'Wonksense', '1.png', '2019-01-23', 1),
-(2, 'Derp@Derpesen.no', 'Derperud', 'qwerty', 'Dermont', 'Derp', 'Derperu', '3.png', '2019-01-23', 0),
-(3, 'heman@willi.no', 'heman', 'qwerty', 'misterio', 'universio', 'Wonkondo', '2.png', '2019-01-23', 0);
+(1, 'hehe@willi.no', 'WilliWonka', '$2y$10$JKhFJm5uGNYIL/qCWJY2bO.3vEOY8pW3n7t6qtzrmBvE69J7sDU82', 'Willy', 'Wonka', 'Wonksensen', '1.png', '2019-01-23', 1),
+(2, 'Derp@Derpesen.no', 'Derperud', '$2y$10$JKhFJm5uGNYIL/qCWJY2bO.3vEOY8pW3n7t6qtzrmBvE69J7sDU82', 'Dermont', 'Derp', 'Derperud', '3.png', '2019-01-23', 0),
+(3, 'heman@willi.no', 'heman', '$2y$10$JKhFJm5uGNYIL/qCWJY2bO.3vEOY8pW3n7t6qtzrmBvE69J7sDU82', 'misterio', 'universio', 'Wonkondo', '2.png', '2019-01-23', 0),
+(10, 'qwert@lol.mon', 'WilliWonkabob', '$2y$10$JKhFJm5uGNYIL/qCWJY2bO.3vEOY8pW3n7t6qtzrmBvE69J7sDU82', 'asdoln', 'dolnes', 'papa', '1.png', '2019-02-08', 0),
+(12, 'qwert@lol.mon', 'WilliWonkabobdsd', '$2y$10$JKhFJm5uGNYIL/qCWJY2bO.3vEOY8pW3n7t6qtzrmBvE69J7sDU82', 'asdoln', 'dolnes', 'papa', '1.png', '2019-02-08', 0),
+(13, 'qwert@lol.mon', 'WilliWonkabobdsd', '$2y$10$JKhFJm5uGNYIL/qCWJY2bO.3vEOY8pW3n7t6qtzrmBvE69J7sDU82', 'asdoln', 'dolnes', 'papa', '1.png', '2019-02-08', 0),
+(14, 'qwert@lol.mon', 'WilliWonkabobdsdsdsd', '$2y$10$JKhFJm5uGNYIL/qCWJY2bO.3vEOY8pW3n7t6qtzrmBvE69J7sDU82', 'asdoln', 'dolnes', 'papa', '1.png', '2019-02-08', 0),
+(16, 'vovje@livve.no', 'JonasGStøre#eFl7B', '$2y$10$HXfGfnEQqrZzrtsUl.44F.YoNtB2DV46aYqS4Z6/8Sy1PohJQic6C', 'qwe', 'wer', 'ert', '1.png', '2019-02-13', 0),
+(17, 'sadad@asda.aasss', 'vaskens#8Cp3D', '$2y$10$pSdsEy68UZ1wyYl.q/4ldOVp1Gzeqq316ZFSKTvT1VQLCfilbdVDq', 'qwe', 'qwe', 'qwre', '1.png', '2019-02-13', 0);
-- --------------------------------------------------------
@@ -152,17 +176,70 @@ CREATE TABLE `user_activity` (
--
INSERT INTO `user_activity` (`id`, `act`, `user_id`, `target_id`, `type`, `date`) VALUES
-(1, 'create', '11', '11', 'users', '2019-01-25 09:33:30'),
-(2, 'update', '', '1', 'users', '2019-01-25 09:40:14'),
-(3, 'update', '1', '1', 'users', '2019-01-25 09:40:38'),
-(5, 'delete', '', '9', 'users', '2019-01-25 09:42:46'),
-(12, 'create', '1', '31', 'games', '2019-01-25 09:57:50'),
-(13, 'update', '1', '8', 'users', '2019-01-25 11:04:17'),
-(14, 'update', '1', '8', 'users', '2019-01-25 11:04:44'),
-(15, 'delete', '', '11', 'users', '2019-01-25 11:32:36'),
-(16, 'update', '1', '8', 'users', '2019-01-26 13:18:30'),
-(17, 'delete', '', '8', 'users', '2019-01-28 10:03:00'),
-(18, 'update', '1', '1', 'users', '2019-01-28 10:03:06');
+(1, 'delete', '', '16', 'users', '2019-02-09 19:09:01'),
+(2, 'update', '1', '94', 'friend_list', '2019-02-11 16:54:52'),
+(3, 'update', '1', '96', 'friend_list', '2019-02-11 16:55:47'),
+(4, 'update', '1', '97', 'friend_list', '2019-02-11 16:55:49'),
+(5, 'update', '1', '95', 'friend_list', '2019-02-11 16:55:52'),
+(6, 'update', '1', '98', 'friend_list', '2019-02-11 19:16:50'),
+(7, 'update', '1', '98', 'friend_list', '2019-02-11 19:50:12'),
+(8, 'update', '1', '94', 'friend_list', '2019-02-11 19:50:17'),
+(9, 'update', '1', '97', 'friend_list', '2019-02-11 19:50:20'),
+(10, 'update', '1', '95', 'friend_list', '2019-02-11 23:33:39'),
+(11, 'update', '1', '96', 'friend_list', '2019-02-12 14:48:09'),
+(12, 'update', '1', '95', 'friend_list', '2019-02-12 15:07:18'),
+(13, 'update', '1', '96', 'friend_list', '2019-02-12 15:07:24'),
+(14, 'delete', '1', '97', 'friend_list', '2019-02-12 15:07:27'),
+(15, 'update', '1', '98', 'friend_list', '2019-02-12 15:07:29'),
+(16, 'delete', '1', '99', 'friend_list', '2019-02-12 15:07:30'),
+(17, 'create', '16', '16', 'users', '2019-02-13 14:04:57'),
+(18, 'create', '17', '17', 'users', '2019-02-13 18:54:23'),
+(19, 'update', '1', '100', 'friend_list', '2019-02-25 20:14:36'),
+(20, 'delete', '1', '15', 'users', '2019-02-25 20:16:40'),
+(21, 'create', '1', '0', 'user_chat', '2019-03-10 15:39:41'),
+(22, 'create', '1', '0', 'user_chat', '2019-03-10 15:40:50'),
+(23, 'create', '1', '0', 'user_chat', '2019-03-10 15:42:42'),
+(24, 'create', '1', '0', 'user_chat', '2019-03-10 15:44:10'),
+(25, 'create', '1', '0', 'user_chat', '2019-03-10 15:44:53'),
+(26, 'create', '1', '0', 'user_chat', '2019-03-10 15:47:46'),
+(27, 'create', '1', '0', 'user_chat', '2019-03-10 15:48:08'),
+(28, 'create', '1', '0', 'user_chat', '2019-03-10 15:49:37'),
+(29, 'create', '1', '0', 'user_chat', '2019-03-10 15:50:34'),
+(30, 'create', '1', '0', 'user_chat', '2019-03-10 15:50:49'),
+(31, 'create', '1', '0', 'user_chat', '2019-03-10 15:53:21');
+
+-- --------------------------------------------------------
+
+--
+-- Tabellstruktur for tabell `user_chat`
+--
+
+CREATE TABLE `user_chat` (
+ `id` int(11) NOT NULL,
+ `user_id` int(11) NOT NULL,
+ `username` varchar(50) NOT NULL,
+ `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+ `text` varchar(200) NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+
+--
+-- Dataark for tabell `user_chat`
+--
+
+INSERT INTO `user_chat` (`id`, `user_id`, `username`, `time`, `text`) VALUES
+(1, 1, '', '2019-03-10 14:08:34', 'dero'),
+(2, 2, 'dererer', '2019-03-10 14:10:02', 'asdsda'),
+(0, 0, 'Somebody', '0000-00-00 00:00:00', 'Hey'),
+(0, 0, 'Somebodys', '0000-00-00 00:00:00', 'Hay'),
+(0, 0, '', '0000-00-00 00:00:00', 'Lol'),
+(0, 0, '', '0000-00-00 00:00:00', 'Der,'),
+(0, 0, '', '0000-00-00 00:00:00', 'Der,'),
+(0, 0, 'WilliWonka', '0000-00-00 00:00:00', 'Hello There People'),
+(0, 0, 'WilliWonka', '0000-00-00 00:00:00', 'WilliWonkaStoner'),
+(0, 0, 'WilliWonka', '0000-00-00 00:00:00', 'ddfsf'),
+(0, 0, 'WilliWonka', '0000-00-00 00:00:00', 'FF'),
+(0, 0, 'WilliWonka', '0000-00-00 00:00:00', 'dfsdf'),
+(0, 0, 'WilliWonka', '0000-00-00 00:00:00', 'dfdfdf');
--
-- Indexes for dumped tables
@@ -218,7 +295,7 @@ ALTER TABLE `achievements`
-- AUTO_INCREMENT for table `friend_list`
--
ALTER TABLE `friend_list`
- MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=29;
+ MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=102;
--
-- AUTO_INCREMENT for table `games`
@@ -230,19 +307,19 @@ ALTER TABLE `games`
-- AUTO_INCREMENT for table `ratings`
--
ALTER TABLE `ratings`
- MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
+ MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=19;
--
-- AUTO_INCREMENT for table `users`
--
ALTER TABLE `users`
- MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=9;
+ MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=18;
--
-- AUTO_INCREMENT for table `user_activity`
--
ALTER TABLE `user_activity`
- MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=19;
+ MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=32;
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
diff --git a/includes/index_content.php b/includes/index_content.php
index edc2863..df7b653 100644
--- a/includes/index_content.php
+++ b/includes/index_content.php
@@ -20,4 +20,23 @@
+
+
+
+
+
+ Username:
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/includes/init.php b/includes/init.php
index 0cf35c7..b76c1f8 100644
--- a/includes/init.php
+++ b/includes/init.php
@@ -22,6 +22,7 @@
require_once("achievement.php"); // Funksjoner som er utenfor klasser.
require_once("rating.php"); // Klassen som omhandler ratings.
require_once("friendship.php"); // Klassen som omhandler vennelister..
+require_once("message.php"); // Klassen som omhandler vennelister..
//Place paths later on here.
?>
\ No newline at end of file
diff --git a/includes/message.php b/includes/message.php
new file mode 100644
index 0000000..6d5264c
--- /dev/null
+++ b/includes/message.php
@@ -0,0 +1,21 @@
+
\ No newline at end of file
diff --git a/includes/read_chat.php b/includes/read_chat.php
new file mode 100644
index 0000000..31b6de4
--- /dev/null
+++ b/includes/read_chat.php
@@ -0,0 +1,18 @@
+username;
+ $text=$message->text;
+ $time=date('G:i', strtotime($message->time));
+
+ echo "$time | $username: $text
\n";
+
+
+ endforeach;
+
+?>
\ No newline at end of file
diff --git a/includes/write_chat.php b/includes/write_chat.php
new file mode 100644
index 0000000..22d84b3
--- /dev/null
+++ b/includes/write_chat.php
@@ -0,0 +1,17 @@
+user_id);
+
+ $message = new Message();
+ $message->username = $user->username;
+ $message->text = substr($_GET["text"], 0, 128);
+
+ $message->save();
+
+?>
\ No newline at end of file
diff --git a/js/chat.js b/js/chat.js
new file mode 100644
index 0000000..ae48270
--- /dev/null
+++ b/js/chat.js
@@ -0,0 +1,36 @@
+$(document).ready(function() {
+ var chatInterval = 300; // Refresh interval in miliseconds
+ var $userName = $("#userName"); // The username
+ var $chatOutput = $("#chatOutput");
+ var $chatInput = $("#chatInput");
+ var $chatSend = $("#chatSend");
+
+ function sendMessage() {
+ var userNameString = $userName.val();
+ var chatInputString = $chatInput.val();
+
+ // Uses here get to call upon the write_chat php-file.
+ $.get("./includes/write_chat.php", {
+ username: userNameString,
+ text: chatInputString
+ });
+
+ $userName.val("");
+ retrieveMessages();
+ $('input[name=chatInput').val('');
+ }
+
+ function retrieveMessages() {
+ $.get("./includes/read_chat.php", function(data) {
+ $chatOutput.html(data);
+ });
+ }
+
+ $chatSend.click(function() {
+ sendMessage();
+ });
+
+ setInterval(function() {
+ retrieveMessages();
+ }, chatInterval);
+});
\ No newline at end of file
diff --git a/js/functions.js b/js/functions.js
index 788fedf..83457bd 100644
--- a/js/functions.js
+++ b/js/functions.js
@@ -1,3 +1,8 @@
+
+/**
+ *
+ * @param int game_id Spillet som det gjelder sin id.
+ */
function rate_game(game_id) {
var score = document.querySelector('input[name="stars"]:checked').value;
From 0e724c1734e2bf25fe5d05014888aa00180462c7 Mon Sep 17 00:00:00 2001
From: Daniel
Date: Mon, 11 Mar 2019 23:29:55 +0100
Subject: [PATCH 16/31] Changed the file-structure and worked more on the chat
Added 4 new folders inside of includes. Classes will keep all the classes. Helpers will hold all the php-files that don't fit in classes or process, like config.php and database.php. Process will contain the php-files that does something, mostly called with ajax. Views will contain the files that shows up on the page, example is lists, content, footer and header. The pages like index.php will be in the main directory.
Created userchat.php to be able place it anywhere, changed the table so that which game the comment is done on, will call on only the comments made on the side of the game.
Had to change a lot of the things file-paths, the init on the files in the new folders had to be changed.
---
gamepage.php | 7 +---
games.php | 6 +--
gamesite_db.sql | 42 +++++++------------
includes/{ => classes}/achievement.php | 0
includes/{ => classes}/db_object.php | 0
includes/{ => classes}/friendship.php | 0
includes/{ => classes}/game.php | 0
includes/{ => classes}/message.php | 4 +-
includes/{ => classes}/rating.php | 0
includes/{ => classes}/session.php | 0
includes/{ => classes}/user.php | 0
includes/{ => helpers}/config.php | 0
includes/{ => helpers}/database.php | 0
includes/{ => helpers}/functions.php | 2 +-
includes/index_content.php | 42 -------------------
includes/init.php | 29 ++++++-------
includes/{ => process}/add_friend.php | 6 ++-
includes/{ => process}/friend_search.php | 5 ++-
.../{ => process}/handle_friend_request.php | 6 ++-
includes/{ => process}/rate_game.php | 5 ++-
includes/{ => process}/read_chat.php | 5 ++-
includes/{ => process}/write_chat.php | 6 ++-
includes/{ => views}/footer.php | 0
includes/{ => views}/gamelist.php | 7 +++-
includes/{ => views}/header.php | 8 +++-
includes/views/index_content.php | 27 ++++++++++++
includes/{ => views}/message_list.php | 6 +--
.../{ => views}/other_profile_content.php | 0
includes/{ => views}/self_profile_content.php | 5 +--
includes/views/userchat.php | 14 +++++++
includes/{ => views}/userlist.php | 5 ++-
index.php | 6 +--
js/chat.js | 4 +-
js/functions.js | 12 +++---
login.php | 2 +-
logout.php | 2 +-
profile.php | 8 ++--
register.php | 2 +-
settings.php | 2 +-
upload.php | 4 +-
users.php | 6 +--
41 files changed, 151 insertions(+), 134 deletions(-)
rename includes/{ => classes}/achievement.php (100%)
rename includes/{ => classes}/db_object.php (100%)
rename includes/{ => classes}/friendship.php (100%)
rename includes/{ => classes}/game.php (100%)
rename includes/{ => classes}/message.php (75%)
rename includes/{ => classes}/rating.php (100%)
rename includes/{ => classes}/session.php (100%)
rename includes/{ => classes}/user.php (100%)
rename includes/{ => helpers}/config.php (100%)
rename includes/{ => helpers}/database.php (100%)
rename includes/{ => helpers}/functions.php (90%)
delete mode 100644 includes/index_content.php
rename includes/{ => process}/add_friend.php (65%)
rename includes/{ => process}/friend_search.php (91%)
rename includes/{ => process}/handle_friend_request.php (79%)
rename includes/{ => process}/rate_game.php (77%)
rename includes/{ => process}/read_chat.php (69%)
rename includes/{ => process}/write_chat.php (60%)
rename includes/{ => views}/footer.php (100%)
rename includes/{ => views}/gamelist.php (89%)
rename includes/{ => views}/header.php (92%)
create mode 100644 includes/views/index_content.php
rename includes/{ => views}/message_list.php (89%)
rename includes/{ => views}/other_profile_content.php (100%)
rename includes/{ => views}/self_profile_content.php (79%)
create mode 100644 includes/views/userchat.php
rename includes/{ => views}/userlist.php (91%)
diff --git a/gamepage.php b/gamepage.php
index a3c3cde..cb83285 100644
--- a/gamepage.php
+++ b/gamepage.php
@@ -6,8 +6,7 @@
* ligger under spillet.
*/
-
-include("includes/header.php"); ?>
+include("includes/views/header.php"); ?>
-
-
is_signed_in()) { ?>
\n";
-
endforeach;
?>
\ No newline at end of file
diff --git a/includes/write_chat.php b/includes/process/write_chat.php
similarity index 60%
rename from includes/write_chat.php
rename to includes/process/write_chat.php
index 22d84b3..aee60c4 100644
--- a/includes/write_chat.php
+++ b/includes/process/write_chat.php
@@ -1,5 +1,8 @@
username = $user->username;
$message->text = substr($_GET["text"], 0, 128);
+ $message->time = date("Y-m-d H:i:s");
$message->save();
diff --git a/includes/footer.php b/includes/views/footer.php
similarity index 100%
rename from includes/footer.php
rename to includes/views/footer.php
diff --git a/includes/gamelist.php b/includes/views/gamelist.php
similarity index 89%
rename from includes/gamelist.php
rename to includes/views/gamelist.php
index 646922f..a42a379 100644
--- a/includes/gamelist.php
+++ b/includes/views/gamelist.php
@@ -1,4 +1,9 @@
-
+
+
-
+
+
diff --git a/includes/views/index_content.php b/includes/views/index_content.php
new file mode 100644
index 0000000..6638fab
--- /dev/null
+++ b/includes/views/index_content.php
@@ -0,0 +1,27 @@
+
+
+ This is the index page, where people will enter the page.
+
+
+
+
+
+
+
+
+
+
+
+
+ Monster Hunter World
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/includes/message_list.php b/includes/views/message_list.php
similarity index 89%
rename from includes/message_list.php
rename to includes/views/message_list.php
index b723ed8..28442d2 100644
--- a/includes/message_list.php
+++ b/includes/views/message_list.php
@@ -4,9 +4,9 @@
* This will show all the messages that a user have, Friend-request is the only one for now.
*/
-include("init.php"); ?>
-
-user_id);
diff --git a/includes/other_profile_content.php b/includes/views/other_profile_content.php
similarity index 100%
rename from includes/other_profile_content.php
rename to includes/views/other_profile_content.php
diff --git a/includes/self_profile_content.php b/includes/views/self_profile_content.php
similarity index 79%
rename from includes/self_profile_content.php
rename to includes/views/self_profile_content.php
index 2744db5..d6c03e6 100644
--- a/includes/self_profile_content.php
+++ b/includes/views/self_profile_content.php
@@ -1,4 +1,3 @@
-
@@ -30,7 +29,7 @@
diff --git a/includes/views/userchat.php b/includes/views/userchat.php
new file mode 100644
index 0000000..6aa535d
--- /dev/null
+++ b/includes/views/userchat.php
@@ -0,0 +1,14 @@
+
+
+
+ Username:
+
+
+
+
+
+
\ No newline at end of file
diff --git a/includes/userlist.php b/includes/views/userlist.php
similarity index 91%
rename from includes/userlist.php
rename to includes/views/userlist.php
index acd69e7..ed613f9 100644
--- a/includes/userlist.php
+++ b/includes/views/userlist.php
@@ -1,7 +1,10 @@
+$path = $_SERVER['DOCUMENT_ROOT'];
+$path .= "/gamesite/includes/init.php";
+require_once($path);
+?>
+
-
+
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/js/chat.js b/js/chat.js
index ae48270..d5abc53 100644
--- a/js/chat.js
+++ b/js/chat.js
@@ -10,7 +10,7 @@ $(document).ready(function() {
var chatInputString = $chatInput.val();
// Uses here get to call upon the write_chat php-file.
- $.get("./includes/write_chat.php", {
+ $.get("./includes/process/write_chat.php", {
username: userNameString,
text: chatInputString
});
@@ -21,7 +21,7 @@ $(document).ready(function() {
}
function retrieveMessages() {
- $.get("./includes/read_chat.php", function(data) {
+ $.get("./includes/process/read_chat.php", function(data) {
$chatOutput.html(data);
});
}
diff --git a/js/functions.js b/js/functions.js
index 83457bd..6bfacf7 100644
--- a/js/functions.js
+++ b/js/functions.js
@@ -19,7 +19,7 @@ function rate_game(game_id) {
}
};
- xmlhttp.open("GET","includes/rate_game.php?s="+score+"&g="+game_id,true);
+ xmlhttp.open("GET","includes/process/rate_game.php?s="+score+"&g="+game_id,true);
xmlhttp.send();
}
}
@@ -36,7 +36,7 @@ function update_userlist() {
document.getElementById("userlist").innerHTML = this.responseText;
};
- xmlhttp.open("GET","includes/userlist.php?s="+search+"&c="+category,true);
+ xmlhttp.open("GET","includes/views/userlist.php?s="+search+"&c="+category,true);
xmlhttp.send();
}
@@ -56,7 +56,7 @@ function update_gamelist() {
document.getElementById("gameslist").innerHTML = this.responseText;
};
- xmlhttp.open("GET","includes/gamelist.php?s="+search+"&c="+category+"&g="+genre,true);
+ xmlhttp.open("GET","includes/views/gamelist.php?s="+search+"&c="+category+"&g="+genre,true);
xmlhttp.send();
}
@@ -70,7 +70,7 @@ function find_friend() {
document.getElementById("friend_search").innerHTML = this.responseText;
};
- xmlhttp.open("GET","includes/friend_search.php?s="+search,true);
+ xmlhttp.open("GET","includes/process/friend_search.php?s="+search,true);
xmlhttp.send();
}
@@ -82,7 +82,7 @@ function send_friend_request(user_id, other_id) {
document.getElementById("send_friend_request").innerHTML = this.responseText;
};
- xmlhttp.open("GET","includes/add_friend.php?i="+user_id+"&o="+other_id,true);
+ xmlhttp.open("GET","includes/process/add_friend.php?i="+user_id+"&o="+other_id,true);
xmlhttp.send();
}
@@ -97,7 +97,7 @@ function handle_friend_request(user_id, other_id, id, act) {
document.getElementById("handle_friend_request").innerHTML = this.responseText;
};
- xmlhttp.open("GET","includes/handle_friend_request.php?ui="+user_id+"&oi="+other_id+"&a="+act+"&id="+id,true);
+ xmlhttp.open("GET","includes/process/handle_friend_request.php?ui="+user_id+"&oi="+other_id+"&a="+act+"&id="+id,true);
xmlhttp.send();
}
diff --git a/login.php b/login.php
index fcb1451..bacb5cf 100644
--- a/login.php
+++ b/login.php
@@ -1,4 +1,4 @@
-
+
+
+
is_signed_in()) {redirect("login.php");}
@@ -13,10 +13,10 @@
*/
if ($session->user_id == $_GET['id']) {
- include("includes/self_profile_content.php");
+ include("includes/views/self_profile_content.php");
} elseif (isset($_GET['id'])) {
- include("includes/other_profile_content.php");
+ include("includes/views/other_profile_content.php");
} else {
redirect("logout.php");
@@ -25,4 +25,4 @@
?>
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/register.php b/register.php
index dea0cc8..266650e 100644
--- a/register.php
+++ b/register.php
@@ -1,4 +1,4 @@
-
+
+
is_signed_in()) {redirect("login.php");} ?>
diff --git a/upload.php b/upload.php
index 25092c1..ca3ff2f 100644
--- a/upload.php
+++ b/upload.php
@@ -1,4 +1,4 @@
-
+
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/users.php b/users.php
index da58709..22cd436 100644
--- a/users.php
+++ b/users.php
@@ -1,6 +1,6 @@
-
+
is_signed_in() || !User::is_admin($session->user_id)) {redirect("login.php");} ?>
@@ -40,11 +40,11 @@
-
\ No newline at end of file
+
\ No newline at end of file
From 7404755b8e8b3aa692458599691e9c5103da7861 Mon Sep 17 00:00:00 2001
From: Daniel
Date: Tue, 12 Mar 2019 14:30:26 +0100
Subject: [PATCH 17/31] Added some more work to the chat-system
Added a new method inside of Message-class, might want to make it an abstract Db_object class later where two parameters is placed.
The method collects all the messages that have the chatId that is of the current game.
Placed the chat on the gamepage.
---
gamepage.php | 51 +++++++++++++++++---------------
includes/classes/message.php | 19 ++++++++++++
includes/classes/user.php | 7 ++++-
includes/process/read_chat.php | 8 ++++-
includes/process/write_chat.php | 18 ++++++-----
includes/views/index_content.php | 9 ------
includes/views/userchat.php | 4 +--
js/chat.js | 38 +++++++++++++++++-------
8 files changed, 99 insertions(+), 55 deletions(-)
diff --git a/gamepage.php b/gamepage.php
index cb83285..8d7521a 100644
--- a/gamepage.php
+++ b/gamepage.php
@@ -18,30 +18,33 @@
?>
-is_signed_in()) { ?>
-
-
+
+
+
+ is_signed_in()) { ?>
+
+
+
+
+
+
+
+ get_rating()) {
+ echo $score;
+ } else {
+ echo "Game has never been rated";
+ }
+ ?>
-
-
-
-
-get_rating()) {
- echo $score;
-} else {
- echo "Game has never been rated";
-}
-?>
-
-
+
-
+
-
+
diff --git a/includes/classes/message.php b/includes/classes/message.php
index 9715648..1ef0d6b 100644
--- a/includes/classes/message.php
+++ b/includes/classes/message.php
@@ -15,6 +15,25 @@ class Message extends Db_object{
public $text;
public $time;
+ /**
+ * Finds all the messages in user_chat that has the same game_id as the param,
+ * then sends them back out again
+ *
+ * @param $game_id is the id for the game.
+ * @return the messages that belong to the chat at the side of the game.
+ */
+ public static function find_messages($game_id) {
+
+ global $database;
+ $game_id = $database->escape_string($game_id);
+
+ $sql = "SELECT * FROM " . self::$db_table . " WHERE ";
+ $sql .= "game_id = '{$game_id}' ";
+ $sql .= "ORDER BY id";
+
+ return static::find_by_query($sql);
+
+ }
}
diff --git a/includes/classes/user.php b/includes/classes/user.php
index 2757689..708bde6 100644
--- a/includes/classes/user.php
+++ b/includes/classes/user.php
@@ -113,7 +113,12 @@ public static function add_friend($user_id, $friend_id) {
}
- // The search function for users, uses when they look trough the list to add to friends.
+ /**
+ * The search function for users, uses when they look trough the list to add to friends.
+ *
+ * @param
+ * @return
+ */
public function find_friend($search) {
global $database;
diff --git a/includes/process/read_chat.php b/includes/process/read_chat.php
index c5486fe..51e98f0 100644
--- a/includes/process/read_chat.php
+++ b/includes/process/read_chat.php
@@ -1,10 +1,16 @@
user_id);
- $message = new Message();
+ $message = new Message();
+
$message->username = $user->username;
- $message->text = substr($_GET["text"], 0, 128);
- $message->time = date("Y-m-d H:i:s");
+ $message->game_id = substr($_GET["chatId"], 0, 20);
+ $message->text = substr($_GET["text"], 0, 128);
+ $message->time = date("Y-m-d H:i:s");
$message->save();
diff --git a/includes/views/index_content.php b/includes/views/index_content.php
index 6638fab..80efcb4 100644
--- a/includes/views/index_content.php
+++ b/includes/views/index_content.php
@@ -3,11 +3,6 @@
This is the index page, where people will enter the page.
-
-
-
@@ -20,8 +15,4 @@
-
-
-
-
\ No newline at end of file
diff --git a/includes/views/userchat.php b/includes/views/userchat.php
index 6aa535d..dffc688 100644
--- a/includes/views/userchat.php
+++ b/includes/views/userchat.php
@@ -1,8 +1,8 @@
- Username:
-
+ Chat ID:
+
diff --git a/js/chat.js b/js/chat.js
index d5abc53..619f241 100644
--- a/js/chat.js
+++ b/js/chat.js
@@ -1,35 +1,53 @@
+
+/**
+ * Jquery for the chat, sends and retrieves the messages that
+ * belong in the chatroom.
+ */
+
$(document).ready(function() {
- var chatInterval = 300; // Refresh interval in miliseconds
- var $userName = $("#userName"); // The username
- var $chatOutput = $("#chatOutput");
- var $chatInput = $("#chatInput");
- var $chatSend = $("#chatSend");
+ var chatInterval = 300; // Refresh interval in miliseconds
+ var $chatId = $("#chatId"); // The chat-id and also the game-id
+ var $chatOutput = $("#chatOutput"); // All the messages that have been collected from the database.
+ var $chatInput = $("#chatInput"); // This is the string that the person writes.
+ var $chatSend = $("#chatSend"); // this is the send button.
+
+ /**
+ * Sends there inn the message into the database.
+ */
function sendMessage() {
- var userNameString = $userName.val();
+ var chatIdString = $chatId.val();
var chatInputString = $chatInput.val();
- // Uses here get to call upon the write_chat php-file.
+ // Uses here .get to call upon the write_chat php-file.
$.get("./includes/process/write_chat.php", {
- username: userNameString,
+ chatId: chatIdString,
text: chatInputString
});
- $userName.val("");
+ $chatInput.val("");
retrieveMessages();
$('input[name=chatInput').val('');
}
+ /**
+ * Collects here out the messages for the chatroom.
+ */
function retrieveMessages() {
- $.get("./includes/process/read_chat.php", function(data) {
+ var chatIdString = $chatId.val();
+
+ // Sends here the chat-id in and collects the output.
+ $.get("./includes/process/read_chat.php", { chatId: chatIdString }, function(data) {
$chatOutput.html(data);
});
}
+ // If the send button is clicked.
$chatSend.click(function() {
sendMessage();
});
+ // Retrieves the messages from the database with
setInterval(function() {
retrieveMessages();
}, chatInterval);
From 76d420aa80e8f00a32bec05848b98b21fdd19bc4 Mon Sep 17 00:00:00 2001
From: Daniel
Date: Tue, 12 Mar 2019 15:00:20 +0100
Subject: [PATCH 18/31] Moved and changed the admin-includes
Had to move them out of admin_includes folder and place them in process.
---
admin_includes/delete_game.php | 18 -------
includes/process/delete_game.php | 22 +++++++++
.../process}/delete_user.php | 49 ++++++++++---------
includes/views/gamelist.php | 2 +-
includes/views/userlist.php | 2 +-
5 files changed, 50 insertions(+), 43 deletions(-)
delete mode 100644 admin_includes/delete_game.php
create mode 100644 includes/process/delete_game.php
rename {admin_includes => includes/process}/delete_user.php (71%)
diff --git a/admin_includes/delete_game.php b/admin_includes/delete_game.php
deleted file mode 100644
index 1dce106..0000000
--- a/admin_includes/delete_game.php
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-is_signed_in()) {redirect("login.php");} ?>
-
-delete();
-
-redirect("../games.php");
-
-?>
\ No newline at end of file
diff --git a/includes/process/delete_game.php b/includes/process/delete_game.php
new file mode 100644
index 0000000..01ffb13
--- /dev/null
+++ b/includes/process/delete_game.php
@@ -0,0 +1,22 @@
+
+
+
+is_signed_in()) {redirect("login.php");} ?>
+
+delete();
+
+redirect("../../games.php");
+
+?>
\ No newline at end of file
diff --git a/admin_includes/delete_user.php b/includes/process/delete_user.php
similarity index 71%
rename from admin_includes/delete_user.php
rename to includes/process/delete_user.php
index f2a2076..86e8003 100644
--- a/admin_includes/delete_user.php
+++ b/includes/process/delete_user.php
@@ -1,24 +1,27 @@
-
-
-
-
-
-
-is_signed_in()) {redirect("login.php");} ?>
-
-delete();
-
-redirect("../users.php");
-
+
+
+
+
+
+is_signed_in()) {redirect("login.php");} ?>
+
+delete();
+
+redirect("../../users.php");
+
?>
\ No newline at end of file
diff --git a/includes/views/gamelist.php b/includes/views/gamelist.php
index a42a379..acb111e 100644
--- a/includes/views/gamelist.php
+++ b/includes/views/gamelist.php
@@ -65,7 +65,7 @@
is_signed_in()) {
if (User::is_admin($session->user_id)) { ?>
- Delete
joined; ?>
- Delete
Edit
View
From 881a77c13cd7ae0e9665dd6b45daa39f13554512 Mon Sep 17 00:00:00 2001
From: Unknown
Date: Tue, 12 Mar 2019 15:24:52 +0100
Subject: [PATCH 19/31] Fixed the email sending
I changed the email from user-> to just email and it works
---
activate.php | 7 ++++++-
includes/user.php | 4 ++--
2 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/activate.php b/activate.php
index 46f650d..fee0fe2 100644
--- a/activate.php
+++ b/activate.php
@@ -1,6 +1,11 @@
-
+
+
diff --git a/includes/user.php b/includes/user.php
index 53c83e5..6eee180 100644
--- a/includes/user.php
+++ b/includes/user.php
@@ -253,9 +253,9 @@ public static function verify_new_user($username, $email, $password, $password_c
$user->last_name = $last_name;
$user->user_image = "1.png";
$user->joined = date("Y-m-d");
- $user->verify_code = md5($username .microtime());
+ $user->verify_code = md5($username . microtime());
- Email::send_ActivationMail($user->$email, $user->first_name, $user->verify_code );
+ Email::send_ActivationMail($email, $first_name, $user->verify_code );
$user->create();
From 9f46d6c381d8a70107eb43a6cedbebb2ed716be6 Mon Sep 17 00:00:00 2001
From: Daniel
Date: Wed, 13 Mar 2019 19:48:53 +0100
Subject: [PATCH 20/31] Added friendlist on profile
friendlist.php shows whatever friends the logged in user might have, started adding the chat above but need ajax to change the chat-room when someone presses on the chat-button behind the names.
Added some more phpdocs.
---
gamepage.php | 9 ++--
includes/classes/friendship.php | 19 +++++++++
includes/classes/user.php | 37 ++++++++++++----
includes/views/friendlist.php | 56 +++++++++++++++++++++++++
includes/views/self_profile_content.php | 7 +++-
includes/views/userchat.php | 5 ++-
js/chat.js | 2 +-
7 files changed, 120 insertions(+), 15 deletions(-)
create mode 100644 includes/views/friendlist.php
diff --git a/gamepage.php b/gamepage.php
index 8d7521a..678377c 100644
--- a/gamepage.php
+++ b/gamepage.php
@@ -18,9 +18,6 @@
?>
-
-
-
is_signed_in()) { ?>
-
\ No newline at end of file
+
+
+
+
diff --git a/includes/views/userchat.php b/includes/views/userchat.php
index dffc688..aab576d 100644
--- a/includes/views/userchat.php
+++ b/includes/views/userchat.php
@@ -1,8 +1,11 @@
+
Chat ID:
-
+
diff --git a/js/chat.js b/js/chat.js
index 619f241..9326e64 100644
--- a/js/chat.js
+++ b/js/chat.js
@@ -47,7 +47,7 @@ $(document).ready(function() {
sendMessage();
});
- // Retrieves the messages from the database with
+ // Retrieves the messages from the database with every interval
setInterval(function() {
retrieveMessages();
}, chatInterval);
From 1850d4d9a437cac40073c33e933fd9c44e75b333 Mon Sep 17 00:00:00 2001
From: Unknown
Date: Thu, 14 Mar 2019 15:32:54 +0100
Subject: [PATCH 21/31] Prepped the email link for activation
Added the code variable to the activation link in email.php so that this can be requested when the user clicks on the activation link
---
activate.php | 26 +++++++++++++++++++++++---
includes/email.php | 4 ++--
2 files changed, 25 insertions(+), 5 deletions(-)
diff --git a/activate.php b/activate.php
index fee0fe2..d80b27b 100644
--- a/activate.php
+++ b/activate.php
@@ -1,15 +1,35 @@
-
+
+
+
+/**
+* Sjekker om at det er noe i get variablen,
+* burde sjekke om det er det rette som blir sendt inn
+
+*/
+if (isset($_GET["code"])){
+ $code = ($_GET["code"]);
+ //echo htmlspecialchars($code);
+ //$sql = "select * from users WHERE '{$verify_code}' = " . $code;
+ //User::find_by_query($sql);
+
+}else{
+ echo "Activation could not be completed";
+}
+
+?>
+
+
+
+
diff --git a/includes/email.php b/includes/email.php
index f7519b2..6f49bae 100644
--- a/includes/email.php
+++ b/includes/email.php
@@ -21,7 +21,7 @@ public static function mail_Sender($to, $subject, $txt){
// Denne tar inn hvilken mail det skal sendes til og fornavent til brukeren
- /*
+ /**
To do
* Legge til aktiveringslink : Doneish, trenger formatering
* Sjekke om denne er klikket på
@@ -33,7 +33,7 @@ public static function send_ActivationMail($to, $first_name, $verify_code ){
$subject = "Hello " . $first_name . " Please activate your account at CM Games";
- $txt = "Please press the link below to activate your new account at CM Games " . "http://localhost/gamesite/activate.php?=" . $verify_code . " Thank you for registering. ";
+ $txt = "Please press the link below to activate your new account at CM Games " . "http://localhost/gamesite/activate.php?code=" . $verify_code . " Thank you for registering. ";
self::mail_sender($to, $subject, $txt);
From f7b4aee93367a2f2edc0a0ada3487c63396b9f4d Mon Sep 17 00:00:00 2001
From: Unknown
Date: Thu, 14 Mar 2019 16:46:43 +0100
Subject: [PATCH 22/31] Activate user can now look for user
When the activation link is clicked, the find_user_by_code method will start and then find the user that has that verify_code and then dump it for now
---
activate.php | 13 ++-----------
includes/user.php | 29 +++++++++++++++++++++++++++++
2 files changed, 31 insertions(+), 11 deletions(-)
diff --git a/activate.php b/activate.php
index d80b27b..f597343 100644
--- a/activate.php
+++ b/activate.php
@@ -12,26 +12,17 @@
*/
if (isset($_GET["code"])){
$code = ($_GET["code"]);
- //echo htmlspecialchars($code);
- //$sql = "select * from users WHERE '{$verify_code}' = " . $code;
- //User::find_by_query($sql);
+
+ User::activate_user($code);
}else{
echo "Activation could not be completed";
}
-
-
-
-
?>
-
-
-
-
\ No newline at end of file
diff --git a/includes/user.php b/includes/user.php
index 6eee180..aa1084f 100644
--- a/includes/user.php
+++ b/includes/user.php
@@ -266,6 +266,35 @@ public static function verify_new_user($username, $email, $password, $password_c
return $error_array;
}
+ public static function find_user_by_code($code){
+
+ global $database;
+ // Tar bort eventuele ting som ikke skal være med i stringen
+ $code = $database->escape_string($code);
+
+ // Finner ut om verify_code også ligger i databasen
+ $sql = "SELECT * FROM ". self::$db_table ." WHERE verify_code = '{$code}' Limit 1";
+
+ // retunerer det database objektet som blir funnet
+ return self::find_by_query($sql);
+ }
+
+ public static function activate_user($code){
+ global $database;
+
+
+ $the_result_array = self::find_user_by_code($code);
+ var_dump($the_result_array);
+
+ // Får in db-objektet og ser om den er tom
+ if(!empty($the_result_array)){
+
+ }
+
+
+
+ }
+
}
?>
\ No newline at end of file
From 6cc1a256a72e040d2d05215e68614e473bf89bf8 Mon Sep 17 00:00:00 2001
From: Unknown
Date: Thu, 14 Mar 2019 18:29:24 +0100
Subject: [PATCH 23/31] Users can be activated now
The activate user method works now, it still needs more work but it works in a basic work
Changes the status on the user from 0 to 1 when activated
---
activate.php | 3 +++
includes/user.php | 36 +++++++++++++++++++++++++++---------
2 files changed, 30 insertions(+), 9 deletions(-)
diff --git a/activate.php b/activate.php
index f597343..235ebe4 100644
--- a/activate.php
+++ b/activate.php
@@ -1,5 +1,7 @@
+
+
escape_string($code);
// Finner ut om verify_code også ligger i databasen
- $sql = "SELECT * FROM ". self::$db_table ." WHERE verify_code = '{$code}' Limit 1";
+ $sql = "SELECT * FROM ". self::$db_table ." WHERE verify_code = '{$code}' AND status = 0 Limit 1 ";
// retunerer det database objektet som blir funnet
- return self::find_by_query($sql);
+ return static ::find_by_query($sql);
}
- public static function activate_user($code){
+ public function activate_user($code){
global $database;
-
- $the_result_array = self::find_user_by_code($code);
- var_dump($the_result_array);
+ // Finner den brukeren som har den aktiverings koden
+ $in = self::find_user_by_code($code);
+ // Henter det neste objektet i rekken og gir det tilbake
+
// Får in db-objektet og ser om den er tom
- if(!empty($the_result_array)){
-
+ // Må legge inn sjekk for at brukeren ikke er aktivert fra før
+ if(!empty($in)){
+ $user = array_shift($in);
+ var_dump($user);
+
+ //Denne endrer status på brukeren til aktiv eller nå bare til 1 og default er 0
+ $user->status = 1;
+
+
+ $user->update();
+
+
+ echo "User was acitvated";
+ }
+ else{
+ echo "This user could not be found or this user is active";
}
From 5bc1fff80450fb749ffa802c1dafd7d7aa56ca80 Mon Sep 17 00:00:00 2001
From: Daniel
Date: Thu, 14 Mar 2019 20:46:48 +0100
Subject: [PATCH 24/31] Added the new header, foreign keys and more
Moved head.php:
Created head.php and placed it in helpers it needs to be called on pages that the header should not be placed on.
Foreign Keys on database:
Added all the keys that the database, there is still some cleaning to do on the names, used cascade to ensure no problems when users is removed, need to use cascade more later.
Added Header Front-end:
Davids front-end were added, had to do quite a lot of work for the back-end to fit it in, removed the movement bar that was there before.
Changed File-Structure:
Placed the assets in the assets-folder and changed the includes for main.css and main.js to fit the changes.
- Cleaned some folders and files
- Added some files that I will use later
- Made some large changes to the database
- Moved the JavaScript from functions.js to main.js
- Got the page name from the URI to decide which of the options should be '-active'
---
achievement.php | 7 +
assets/css/main.css | 3104 ++++++++++++++
assets/css/main.css.map | 7 +
assets/img/avatar.jpg | Bin 0 -> 62562 bytes
assets/img/brand.svg | 1 +
{img => assets/img}/email.svg | 98 +-
{img => assets/img}/facebook.png | Bin
{img => assets/img}/game.jpg | Bin
{img => assets/img}/google.png | Bin
{img => assets/img}/login.jpg | Bin
{img => assets/img}/password.svg | 130 +-
{img => assets/img}/profile/default/1.png | Bin
{img => assets/img}/profile/default/10.png | Bin
{img => assets/img}/profile/default/11.png | Bin
{img => assets/img}/profile/default/12.png | Bin
{img => assets/img}/profile/default/2.png | Bin
{img => assets/img}/profile/default/3.png | Bin
{img => assets/img}/profile/default/4.png | Bin
{img => assets/img}/profile/default/5.png | Bin
{img => assets/img}/profile/default/6.png | Bin
{img => assets/img}/profile/default/7.png | Bin
{img => assets/img}/profile/default/8.png | Bin
{img => assets/img}/profile/default/9.png | Bin
{img => assets/img}/tba.png | Bin
{js => assets/js}/chat.js | 0
js/functions.js => assets/js/main.js | 0
{scss => assets/scss}/main.scss | 7 +-
.../scss}/modules/_breakpoint.scss | 14 +-
{scss => assets/scss}/modules/_color.scss | 13 +-
assets/scss/partials/_avatar.scss | 42 +
{scss => assets/scss}/partials/_base.scss | 0
{scss => assets/scss}/partials/_button.scss | 2 +-
{scss => assets/scss}/partials/_card.scss | 80 +-
assets/scss/partials/_casing.scss | 5 +
assets/scss/partials/_dropdown.scss | 95 +
.../scss}/partials/_float-label.scss | 62 +-
assets/scss/partials/_header.scss | 126 +
{scss => assets/scss}/partials/_login.scss | 220 +-
{scss => assets/scss}/partials/_utility.scss | 0
assets/scss/vendor/_animate.scss | 3623 +++++++++++++++++
{scss => assets/scss}/vendor/_normalize.scss | 484 +--
css/main.css | 453 ---
css/main.css.map | 7 -
gamepage.php | 2 -
games.php | 49 -
gamesite_db.sql | 172 +-
includes/classes/message.php | 2 +-
includes/classes/user.php | 2 +-
includes/helpers/head.php | 25 +
includes/process/write_chat.php | 1 +
includes/views/header.php | 119 +-
includes/views/self_profile_content.php | 2 -
includes/views/userchat.php | 2 +-
index.php | 44 +-
js/main.js | 1 -
login.php | 53 +-
statistics.php | 7 +
users.php | 2 -
58 files changed, 7869 insertions(+), 1194 deletions(-)
create mode 100644 achievement.php
create mode 100644 assets/css/main.css
create mode 100644 assets/css/main.css.map
create mode 100644 assets/img/avatar.jpg
create mode 100644 assets/img/brand.svg
rename {img => assets/img}/email.svg (96%)
rename {img => assets/img}/facebook.png (100%)
rename {img => assets/img}/game.jpg (100%)
rename {img => assets/img}/google.png (100%)
rename {img => assets/img}/login.jpg (100%)
rename {img => assets/img}/password.svg (98%)
rename {img => assets/img}/profile/default/1.png (100%)
rename {img => assets/img}/profile/default/10.png (100%)
rename {img => assets/img}/profile/default/11.png (100%)
rename {img => assets/img}/profile/default/12.png (100%)
rename {img => assets/img}/profile/default/2.png (100%)
rename {img => assets/img}/profile/default/3.png (100%)
rename {img => assets/img}/profile/default/4.png (100%)
rename {img => assets/img}/profile/default/5.png (100%)
rename {img => assets/img}/profile/default/6.png (100%)
rename {img => assets/img}/profile/default/7.png (100%)
rename {img => assets/img}/profile/default/8.png (100%)
rename {img => assets/img}/profile/default/9.png (100%)
rename {img => assets/img}/tba.png (100%)
rename {js => assets/js}/chat.js (100%)
rename js/functions.js => assets/js/main.js (100%)
rename {scss => assets/scss}/main.scss (76%)
rename {scss => assets/scss}/modules/_breakpoint.scss (97%)
rename {scss => assets/scss}/modules/_color.scss (67%)
create mode 100644 assets/scss/partials/_avatar.scss
rename {scss => assets/scss}/partials/_base.scss (100%)
rename {scss => assets/scss}/partials/_button.scss (98%)
rename {scss => assets/scss}/partials/_card.scss (94%)
create mode 100644 assets/scss/partials/_casing.scss
create mode 100644 assets/scss/partials/_dropdown.scss
rename {scss => assets/scss}/partials/_float-label.scss (95%)
create mode 100644 assets/scss/partials/_header.scss
rename {scss => assets/scss}/partials/_login.scss (86%)
rename {scss => assets/scss}/partials/_utility.scss (100%)
create mode 100644 assets/scss/vendor/_animate.scss
rename {scss => assets/scss}/vendor/_normalize.scss (96%)
delete mode 100644 css/main.css
delete mode 100644 css/main.css.map
delete mode 100644 games.php
create mode 100644 includes/helpers/head.php
delete mode 100644 js/main.js
create mode 100644 statistics.php
diff --git a/achievement.php b/achievement.php
new file mode 100644
index 0000000..782211c
--- /dev/null
+++ b/achievement.php
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/assets/css/main.css b/assets/css/main.css
new file mode 100644
index 0000000..37b137b
--- /dev/null
+++ b/assets/css/main.css
@@ -0,0 +1,3104 @@
+html {
+ line-height: 1.15;
+ -webkit-text-size-adjust: 100%; }
+
+body {
+ margin: 0; }
+
+h1 {
+ font-size: 2em;
+ margin: 0.67em 0; }
+
+hr {
+ -webkit-box-sizing: content-box;
+ box-sizing: content-box;
+ height: 0;
+ overflow: visible; }
+
+pre {
+ font-family: monospace, monospace;
+ font-size: 1em; }
+
+a {
+ background-color: transparent; }
+
+abbr[title] {
+ border-bottom: none;
+ text-decoration: underline;
+ -webkit-text-decoration: underline dotted;
+ text-decoration: underline dotted; }
+
+b,
+strong {
+ font-weight: bolder; }
+
+code,
+kbd,
+samp {
+ font-family: monospace, monospace;
+ font-size: 1em; }
+
+small {
+ font-size: 80%; }
+
+sub,
+sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline; }
+
+sub {
+ bottom: -0.25em; }
+
+sup {
+ top: -0.5em; }
+
+img {
+ border-style: none; }
+
+button,
+input,
+optgroup,
+select,
+textarea {
+ font-family: inherit;
+ font-size: 100%;
+ line-height: 1.15;
+ margin: 0; }
+
+button,
+input {
+ overflow: visible; }
+
+button,
+select {
+ text-transform: none; }
+
+button,
+[type="button"],
+[type="reset"],
+[type="submit"] {
+ -webkit-appearance: button; }
+
+button::-moz-focus-inner,
+[type="button"]::-moz-focus-inner,
+[type="reset"]::-moz-focus-inner,
+[type="submit"]::-moz-focus-inner {
+ border-style: none;
+ padding: 0; }
+
+button:-moz-focusring,
+[type="button"]:-moz-focusring,
+[type="reset"]:-moz-focusring,
+[type="submit"]:-moz-focusring {
+ outline: 1px dotted ButtonText; }
+
+fieldset {
+ padding: 0.35em 0.75em 0.625em; }
+
+legend {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ color: inherit;
+ display: table;
+ max-width: 100%;
+ padding: 0;
+ white-space: normal; }
+
+progress {
+ vertical-align: baseline; }
+
+textarea {
+ overflow: auto; }
+
+[type="checkbox"],
+[type="radio"] {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ padding: 0; }
+
+[type="number"]::-webkit-inner-spin-button,
+[type="number"]::-webkit-outer-spin-button {
+ height: auto; }
+
+[type="search"] {
+ -webkit-appearance: textfield;
+ outline-offset: -2px; }
+
+[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none; }
+
+::-webkit-file-upload-button {
+ -webkit-appearance: button;
+ font: inherit; }
+
+details {
+ display: block; }
+
+summary {
+ display: list-item; }
+
+template {
+ display: none; }
+
+[hidden] {
+ display: none; }
+
+/*!
+ * animate.css -http://daneden.me/animate
+ * Version - 3.7.0
+ * Licensed under the MIT license - http://opensource.org/licenses/MIT
+ *
+ * Copyright (c) 2018 Daniel Eden
+ */
+@-webkit-keyframes bounce {
+ from,
+ 20%,
+ 53%,
+ 80%,
+ to {
+ -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); }
+ 40%,
+ 43% {
+ -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
+ animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
+ -webkit-transform: translate3d(0, -30px, 0);
+ transform: translate3d(0, -30px, 0); }
+ 70% {
+ -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
+ animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
+ -webkit-transform: translate3d(0, -15px, 0);
+ transform: translate3d(0, -15px, 0); }
+ 90% {
+ -webkit-transform: translate3d(0, -4px, 0);
+ transform: translate3d(0, -4px, 0); } }
+@keyframes bounce {
+ from,
+ 20%,
+ 53%,
+ 80%,
+ to {
+ -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); }
+ 40%,
+ 43% {
+ -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
+ animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
+ -webkit-transform: translate3d(0, -30px, 0);
+ transform: translate3d(0, -30px, 0); }
+ 70% {
+ -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
+ animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
+ -webkit-transform: translate3d(0, -15px, 0);
+ transform: translate3d(0, -15px, 0); }
+ 90% {
+ -webkit-transform: translate3d(0, -4px, 0);
+ transform: translate3d(0, -4px, 0); } }
+.bounce {
+ -webkit-animation-name: bounce;
+ animation-name: bounce;
+ -webkit-transform-origin: center bottom;
+ transform-origin: center bottom; }
+
+@-webkit-keyframes flash {
+ from,
+ 50%,
+ to {
+ opacity: 1; }
+ 25%,
+ 75% {
+ opacity: 0; } }
+@keyframes flash {
+ from,
+ 50%,
+ to {
+ opacity: 1; }
+ 25%,
+ 75% {
+ opacity: 0; } }
+.flash {
+ -webkit-animation-name: flash;
+ animation-name: flash; }
+
+/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
+@-webkit-keyframes pulse {
+ from {
+ -webkit-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1); }
+ 50% {
+ -webkit-transform: scale3d(1.05, 1.05, 1.05);
+ transform: scale3d(1.05, 1.05, 1.05); }
+ to {
+ -webkit-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1); } }
+@keyframes pulse {
+ from {
+ -webkit-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1); }
+ 50% {
+ -webkit-transform: scale3d(1.05, 1.05, 1.05);
+ transform: scale3d(1.05, 1.05, 1.05); }
+ to {
+ -webkit-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1); } }
+.pulse {
+ -webkit-animation-name: pulse;
+ animation-name: pulse; }
+
+@-webkit-keyframes rubberBand {
+ from {
+ -webkit-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1); }
+ 30% {
+ -webkit-transform: scale3d(1.25, 0.75, 1);
+ transform: scale3d(1.25, 0.75, 1); }
+ 40% {
+ -webkit-transform: scale3d(0.75, 1.25, 1);
+ transform: scale3d(0.75, 1.25, 1); }
+ 50% {
+ -webkit-transform: scale3d(1.15, 0.85, 1);
+ transform: scale3d(1.15, 0.85, 1); }
+ 65% {
+ -webkit-transform: scale3d(0.95, 1.05, 1);
+ transform: scale3d(0.95, 1.05, 1); }
+ 75% {
+ -webkit-transform: scale3d(1.05, 0.95, 1);
+ transform: scale3d(1.05, 0.95, 1); }
+ to {
+ -webkit-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1); } }
+@keyframes rubberBand {
+ from {
+ -webkit-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1); }
+ 30% {
+ -webkit-transform: scale3d(1.25, 0.75, 1);
+ transform: scale3d(1.25, 0.75, 1); }
+ 40% {
+ -webkit-transform: scale3d(0.75, 1.25, 1);
+ transform: scale3d(0.75, 1.25, 1); }
+ 50% {
+ -webkit-transform: scale3d(1.15, 0.85, 1);
+ transform: scale3d(1.15, 0.85, 1); }
+ 65% {
+ -webkit-transform: scale3d(0.95, 1.05, 1);
+ transform: scale3d(0.95, 1.05, 1); }
+ 75% {
+ -webkit-transform: scale3d(1.05, 0.95, 1);
+ transform: scale3d(1.05, 0.95, 1); }
+ to {
+ -webkit-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1); } }
+.rubberBand {
+ -webkit-animation-name: rubberBand;
+ animation-name: rubberBand; }
+
+@-webkit-keyframes shake {
+ from,
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); }
+ 10%,
+ 30%,
+ 50%,
+ 70%,
+ 90% {
+ -webkit-transform: translate3d(-10px, 0, 0);
+ transform: translate3d(-10px, 0, 0); }
+ 20%,
+ 40%,
+ 60%,
+ 80% {
+ -webkit-transform: translate3d(10px, 0, 0);
+ transform: translate3d(10px, 0, 0); } }
+@keyframes shake {
+ from,
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); }
+ 10%,
+ 30%,
+ 50%,
+ 70%,
+ 90% {
+ -webkit-transform: translate3d(-10px, 0, 0);
+ transform: translate3d(-10px, 0, 0); }
+ 20%,
+ 40%,
+ 60%,
+ 80% {
+ -webkit-transform: translate3d(10px, 0, 0);
+ transform: translate3d(10px, 0, 0); } }
+.shake {
+ -webkit-animation-name: shake;
+ animation-name: shake; }
+
+@-webkit-keyframes headShake {
+ 0% {
+ -webkit-transform: translateX(0);
+ transform: translateX(0); }
+ 6.5% {
+ -webkit-transform: translateX(-6px) rotateY(-9deg);
+ transform: translateX(-6px) rotateY(-9deg); }
+ 18.5% {
+ -webkit-transform: translateX(5px) rotateY(7deg);
+ transform: translateX(5px) rotateY(7deg); }
+ 31.5% {
+ -webkit-transform: translateX(-3px) rotateY(-5deg);
+ transform: translateX(-3px) rotateY(-5deg); }
+ 43.5% {
+ -webkit-transform: translateX(2px) rotateY(3deg);
+ transform: translateX(2px) rotateY(3deg); }
+ 50% {
+ -webkit-transform: translateX(0);
+ transform: translateX(0); } }
+@keyframes headShake {
+ 0% {
+ -webkit-transform: translateX(0);
+ transform: translateX(0); }
+ 6.5% {
+ -webkit-transform: translateX(-6px) rotateY(-9deg);
+ transform: translateX(-6px) rotateY(-9deg); }
+ 18.5% {
+ -webkit-transform: translateX(5px) rotateY(7deg);
+ transform: translateX(5px) rotateY(7deg); }
+ 31.5% {
+ -webkit-transform: translateX(-3px) rotateY(-5deg);
+ transform: translateX(-3px) rotateY(-5deg); }
+ 43.5% {
+ -webkit-transform: translateX(2px) rotateY(3deg);
+ transform: translateX(2px) rotateY(3deg); }
+ 50% {
+ -webkit-transform: translateX(0);
+ transform: translateX(0); } }
+.headShake {
+ -webkit-animation-timing-function: ease-in-out;
+ animation-timing-function: ease-in-out;
+ -webkit-animation-name: headShake;
+ animation-name: headShake; }
+
+@-webkit-keyframes swing {
+ 20% {
+ -webkit-transform: rotate3d(0, 0, 1, 15deg);
+ transform: rotate3d(0, 0, 1, 15deg); }
+ 40% {
+ -webkit-transform: rotate3d(0, 0, 1, -10deg);
+ transform: rotate3d(0, 0, 1, -10deg); }
+ 60% {
+ -webkit-transform: rotate3d(0, 0, 1, 5deg);
+ transform: rotate3d(0, 0, 1, 5deg); }
+ 80% {
+ -webkit-transform: rotate3d(0, 0, 1, -5deg);
+ transform: rotate3d(0, 0, 1, -5deg); }
+ to {
+ -webkit-transform: rotate3d(0, 0, 1, 0deg);
+ transform: rotate3d(0, 0, 1, 0deg); } }
+@keyframes swing {
+ 20% {
+ -webkit-transform: rotate3d(0, 0, 1, 15deg);
+ transform: rotate3d(0, 0, 1, 15deg); }
+ 40% {
+ -webkit-transform: rotate3d(0, 0, 1, -10deg);
+ transform: rotate3d(0, 0, 1, -10deg); }
+ 60% {
+ -webkit-transform: rotate3d(0, 0, 1, 5deg);
+ transform: rotate3d(0, 0, 1, 5deg); }
+ 80% {
+ -webkit-transform: rotate3d(0, 0, 1, -5deg);
+ transform: rotate3d(0, 0, 1, -5deg); }
+ to {
+ -webkit-transform: rotate3d(0, 0, 1, 0deg);
+ transform: rotate3d(0, 0, 1, 0deg); } }
+.swing {
+ -webkit-transform-origin: top center;
+ transform-origin: top center;
+ -webkit-animation-name: swing;
+ animation-name: swing; }
+
+@-webkit-keyframes tada {
+ from {
+ -webkit-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1); }
+ 10%,
+ 20% {
+ -webkit-transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg);
+ transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg); }
+ 30%,
+ 50%,
+ 70%,
+ 90% {
+ -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); }
+ 40%,
+ 60%,
+ 80% {
+ -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); }
+ to {
+ -webkit-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1); } }
+@keyframes tada {
+ from {
+ -webkit-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1); }
+ 10%,
+ 20% {
+ -webkit-transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg);
+ transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg); }
+ 30%,
+ 50%,
+ 70%,
+ 90% {
+ -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); }
+ 40%,
+ 60%,
+ 80% {
+ -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); }
+ to {
+ -webkit-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1); } }
+.tada {
+ -webkit-animation-name: tada;
+ animation-name: tada; }
+
+/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
+@-webkit-keyframes wobble {
+ from {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); }
+ 15% {
+ -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
+ transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); }
+ 30% {
+ -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
+ transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); }
+ 45% {
+ -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
+ transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); }
+ 60% {
+ -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
+ transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); }
+ 75% {
+ -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
+ transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); }
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); } }
+@keyframes wobble {
+ from {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); }
+ 15% {
+ -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
+ transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); }
+ 30% {
+ -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
+ transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); }
+ 45% {
+ -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
+ transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); }
+ 60% {
+ -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
+ transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); }
+ 75% {
+ -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
+ transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); }
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); } }
+.wobble {
+ -webkit-animation-name: wobble;
+ animation-name: wobble; }
+
+@-webkit-keyframes jello {
+ from,
+ 11.1%,
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); }
+ 22.2% {
+ -webkit-transform: skewX(-12.5deg) skewY(-12.5deg);
+ transform: skewX(-12.5deg) skewY(-12.5deg); }
+ 33.3% {
+ -webkit-transform: skewX(6.25deg) skewY(6.25deg);
+ transform: skewX(6.25deg) skewY(6.25deg); }
+ 44.4% {
+ -webkit-transform: skewX(-3.125deg) skewY(-3.125deg);
+ transform: skewX(-3.125deg) skewY(-3.125deg); }
+ 55.5% {
+ -webkit-transform: skewX(1.5625deg) skewY(1.5625deg);
+ transform: skewX(1.5625deg) skewY(1.5625deg); }
+ 66.6% {
+ -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg);
+ transform: skewX(-0.78125deg) skewY(-0.78125deg); }
+ 77.7% {
+ -webkit-transform: skewX(0.390625deg) skewY(0.390625deg);
+ transform: skewX(0.390625deg) skewY(0.390625deg); }
+ 88.8% {
+ -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
+ transform: skewX(-0.1953125deg) skewY(-0.1953125deg); } }
+@keyframes jello {
+ from,
+ 11.1%,
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); }
+ 22.2% {
+ -webkit-transform: skewX(-12.5deg) skewY(-12.5deg);
+ transform: skewX(-12.5deg) skewY(-12.5deg); }
+ 33.3% {
+ -webkit-transform: skewX(6.25deg) skewY(6.25deg);
+ transform: skewX(6.25deg) skewY(6.25deg); }
+ 44.4% {
+ -webkit-transform: skewX(-3.125deg) skewY(-3.125deg);
+ transform: skewX(-3.125deg) skewY(-3.125deg); }
+ 55.5% {
+ -webkit-transform: skewX(1.5625deg) skewY(1.5625deg);
+ transform: skewX(1.5625deg) skewY(1.5625deg); }
+ 66.6% {
+ -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg);
+ transform: skewX(-0.78125deg) skewY(-0.78125deg); }
+ 77.7% {
+ -webkit-transform: skewX(0.390625deg) skewY(0.390625deg);
+ transform: skewX(0.390625deg) skewY(0.390625deg); }
+ 88.8% {
+ -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
+ transform: skewX(-0.1953125deg) skewY(-0.1953125deg); } }
+.jello {
+ -webkit-animation-name: jello;
+ animation-name: jello;
+ -webkit-transform-origin: center;
+ transform-origin: center; }
+
+@-webkit-keyframes heartBeat {
+ 0% {
+ -webkit-transform: scale(1);
+ transform: scale(1); }
+ 14% {
+ -webkit-transform: scale(1.3);
+ transform: scale(1.3); }
+ 28% {
+ -webkit-transform: scale(1);
+ transform: scale(1); }
+ 42% {
+ -webkit-transform: scale(1.3);
+ transform: scale(1.3); }
+ 70% {
+ -webkit-transform: scale(1);
+ transform: scale(1); } }
+@keyframes heartBeat {
+ 0% {
+ -webkit-transform: scale(1);
+ transform: scale(1); }
+ 14% {
+ -webkit-transform: scale(1.3);
+ transform: scale(1.3); }
+ 28% {
+ -webkit-transform: scale(1);
+ transform: scale(1); }
+ 42% {
+ -webkit-transform: scale(1.3);
+ transform: scale(1.3); }
+ 70% {
+ -webkit-transform: scale(1);
+ transform: scale(1); } }
+.heartBeat {
+ -webkit-animation-name: heartBeat;
+ animation-name: heartBeat;
+ -webkit-animation-duration: 1.3s;
+ animation-duration: 1.3s;
+ -webkit-animation-timing-function: ease-in-out;
+ animation-timing-function: ease-in-out; }
+
+@-webkit-keyframes bounceIn {
+ from,
+ 20%,
+ 40%,
+ 60%,
+ 80%,
+ to {
+ -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); }
+ 0% {
+ opacity: 0;
+ -webkit-transform: scale3d(0.3, 0.3, 0.3);
+ transform: scale3d(0.3, 0.3, 0.3); }
+ 20% {
+ -webkit-transform: scale3d(1.1, 1.1, 1.1);
+ transform: scale3d(1.1, 1.1, 1.1); }
+ 40% {
+ -webkit-transform: scale3d(0.9, 0.9, 0.9);
+ transform: scale3d(0.9, 0.9, 0.9); }
+ 60% {
+ opacity: 1;
+ -webkit-transform: scale3d(1.03, 1.03, 1.03);
+ transform: scale3d(1.03, 1.03, 1.03); }
+ 80% {
+ -webkit-transform: scale3d(0.97, 0.97, 0.97);
+ transform: scale3d(0.97, 0.97, 0.97); }
+ to {
+ opacity: 1;
+ -webkit-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1); } }
+@keyframes bounceIn {
+ from,
+ 20%,
+ 40%,
+ 60%,
+ 80%,
+ to {
+ -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); }
+ 0% {
+ opacity: 0;
+ -webkit-transform: scale3d(0.3, 0.3, 0.3);
+ transform: scale3d(0.3, 0.3, 0.3); }
+ 20% {
+ -webkit-transform: scale3d(1.1, 1.1, 1.1);
+ transform: scale3d(1.1, 1.1, 1.1); }
+ 40% {
+ -webkit-transform: scale3d(0.9, 0.9, 0.9);
+ transform: scale3d(0.9, 0.9, 0.9); }
+ 60% {
+ opacity: 1;
+ -webkit-transform: scale3d(1.03, 1.03, 1.03);
+ transform: scale3d(1.03, 1.03, 1.03); }
+ 80% {
+ -webkit-transform: scale3d(0.97, 0.97, 0.97);
+ transform: scale3d(0.97, 0.97, 0.97); }
+ to {
+ opacity: 1;
+ -webkit-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1); } }
+.bounceIn {
+ -webkit-animation-duration: 0.75s;
+ animation-duration: 0.75s;
+ -webkit-animation-name: bounceIn;
+ animation-name: bounceIn; }
+
+@-webkit-keyframes bounceInDown {
+ from,
+ 60%,
+ 75%,
+ 90%,
+ to {
+ -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); }
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -3000px, 0);
+ transform: translate3d(0, -3000px, 0); }
+ 60% {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 25px, 0);
+ transform: translate3d(0, 25px, 0); }
+ 75% {
+ -webkit-transform: translate3d(0, -10px, 0);
+ transform: translate3d(0, -10px, 0); }
+ 90% {
+ -webkit-transform: translate3d(0, 5px, 0);
+ transform: translate3d(0, 5px, 0); }
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); } }
+@keyframes bounceInDown {
+ from,
+ 60%,
+ 75%,
+ 90%,
+ to {
+ -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); }
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -3000px, 0);
+ transform: translate3d(0, -3000px, 0); }
+ 60% {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 25px, 0);
+ transform: translate3d(0, 25px, 0); }
+ 75% {
+ -webkit-transform: translate3d(0, -10px, 0);
+ transform: translate3d(0, -10px, 0); }
+ 90% {
+ -webkit-transform: translate3d(0, 5px, 0);
+ transform: translate3d(0, 5px, 0); }
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); } }
+.bounceInDown {
+ -webkit-animation-name: bounceInDown;
+ animation-name: bounceInDown; }
+
+@-webkit-keyframes bounceInLeft {
+ from,
+ 60%,
+ 75%,
+ 90%,
+ to {
+ -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); }
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(-3000px, 0, 0);
+ transform: translate3d(-3000px, 0, 0); }
+ 60% {
+ opacity: 1;
+ -webkit-transform: translate3d(25px, 0, 0);
+ transform: translate3d(25px, 0, 0); }
+ 75% {
+ -webkit-transform: translate3d(-10px, 0, 0);
+ transform: translate3d(-10px, 0, 0); }
+ 90% {
+ -webkit-transform: translate3d(5px, 0, 0);
+ transform: translate3d(5px, 0, 0); }
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); } }
+@keyframes bounceInLeft {
+ from,
+ 60%,
+ 75%,
+ 90%,
+ to {
+ -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); }
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(-3000px, 0, 0);
+ transform: translate3d(-3000px, 0, 0); }
+ 60% {
+ opacity: 1;
+ -webkit-transform: translate3d(25px, 0, 0);
+ transform: translate3d(25px, 0, 0); }
+ 75% {
+ -webkit-transform: translate3d(-10px, 0, 0);
+ transform: translate3d(-10px, 0, 0); }
+ 90% {
+ -webkit-transform: translate3d(5px, 0, 0);
+ transform: translate3d(5px, 0, 0); }
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); } }
+.bounceInLeft {
+ -webkit-animation-name: bounceInLeft;
+ animation-name: bounceInLeft; }
+
+@-webkit-keyframes bounceInRight {
+ from,
+ 60%,
+ 75%,
+ 90%,
+ to {
+ -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); }
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(3000px, 0, 0);
+ transform: translate3d(3000px, 0, 0); }
+ 60% {
+ opacity: 1;
+ -webkit-transform: translate3d(-25px, 0, 0);
+ transform: translate3d(-25px, 0, 0); }
+ 75% {
+ -webkit-transform: translate3d(10px, 0, 0);
+ transform: translate3d(10px, 0, 0); }
+ 90% {
+ -webkit-transform: translate3d(-5px, 0, 0);
+ transform: translate3d(-5px, 0, 0); }
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); } }
+@keyframes bounceInRight {
+ from,
+ 60%,
+ 75%,
+ 90%,
+ to {
+ -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); }
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(3000px, 0, 0);
+ transform: translate3d(3000px, 0, 0); }
+ 60% {
+ opacity: 1;
+ -webkit-transform: translate3d(-25px, 0, 0);
+ transform: translate3d(-25px, 0, 0); }
+ 75% {
+ -webkit-transform: translate3d(10px, 0, 0);
+ transform: translate3d(10px, 0, 0); }
+ 90% {
+ -webkit-transform: translate3d(-5px, 0, 0);
+ transform: translate3d(-5px, 0, 0); }
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); } }
+.bounceInRight {
+ -webkit-animation-name: bounceInRight;
+ animation-name: bounceInRight; }
+
+@-webkit-keyframes bounceInUp {
+ from,
+ 60%,
+ 75%,
+ 90%,
+ to {
+ -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); }
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 3000px, 0);
+ transform: translate3d(0, 3000px, 0); }
+ 60% {
+ opacity: 1;
+ -webkit-transform: translate3d(0, -20px, 0);
+ transform: translate3d(0, -20px, 0); }
+ 75% {
+ -webkit-transform: translate3d(0, 10px, 0);
+ transform: translate3d(0, 10px, 0); }
+ 90% {
+ -webkit-transform: translate3d(0, -5px, 0);
+ transform: translate3d(0, -5px, 0); }
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); } }
+@keyframes bounceInUp {
+ from,
+ 60%,
+ 75%,
+ 90%,
+ to {
+ -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); }
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 3000px, 0);
+ transform: translate3d(0, 3000px, 0); }
+ 60% {
+ opacity: 1;
+ -webkit-transform: translate3d(0, -20px, 0);
+ transform: translate3d(0, -20px, 0); }
+ 75% {
+ -webkit-transform: translate3d(0, 10px, 0);
+ transform: translate3d(0, 10px, 0); }
+ 90% {
+ -webkit-transform: translate3d(0, -5px, 0);
+ transform: translate3d(0, -5px, 0); }
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); } }
+.bounceInUp {
+ -webkit-animation-name: bounceInUp;
+ animation-name: bounceInUp; }
+
+@-webkit-keyframes bounceOut {
+ 20% {
+ -webkit-transform: scale3d(0.9, 0.9, 0.9);
+ transform: scale3d(0.9, 0.9, 0.9); }
+ 50%,
+ 55% {
+ opacity: 1;
+ -webkit-transform: scale3d(1.1, 1.1, 1.1);
+ transform: scale3d(1.1, 1.1, 1.1); }
+ to {
+ opacity: 0;
+ -webkit-transform: scale3d(0.3, 0.3, 0.3);
+ transform: scale3d(0.3, 0.3, 0.3); } }
+@keyframes bounceOut {
+ 20% {
+ -webkit-transform: scale3d(0.9, 0.9, 0.9);
+ transform: scale3d(0.9, 0.9, 0.9); }
+ 50%,
+ 55% {
+ opacity: 1;
+ -webkit-transform: scale3d(1.1, 1.1, 1.1);
+ transform: scale3d(1.1, 1.1, 1.1); }
+ to {
+ opacity: 0;
+ -webkit-transform: scale3d(0.3, 0.3, 0.3);
+ transform: scale3d(0.3, 0.3, 0.3); } }
+.bounceOut {
+ -webkit-animation-duration: 0.75s;
+ animation-duration: 0.75s;
+ -webkit-animation-name: bounceOut;
+ animation-name: bounceOut; }
+
+@-webkit-keyframes bounceOutDown {
+ 20% {
+ -webkit-transform: translate3d(0, 10px, 0);
+ transform: translate3d(0, 10px, 0); }
+ 40%,
+ 45% {
+ opacity: 1;
+ -webkit-transform: translate3d(0, -20px, 0);
+ transform: translate3d(0, -20px, 0); }
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 2000px, 0);
+ transform: translate3d(0, 2000px, 0); } }
+@keyframes bounceOutDown {
+ 20% {
+ -webkit-transform: translate3d(0, 10px, 0);
+ transform: translate3d(0, 10px, 0); }
+ 40%,
+ 45% {
+ opacity: 1;
+ -webkit-transform: translate3d(0, -20px, 0);
+ transform: translate3d(0, -20px, 0); }
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 2000px, 0);
+ transform: translate3d(0, 2000px, 0); } }
+.bounceOutDown {
+ -webkit-animation-name: bounceOutDown;
+ animation-name: bounceOutDown; }
+
+@-webkit-keyframes bounceOutLeft {
+ 20% {
+ opacity: 1;
+ -webkit-transform: translate3d(20px, 0, 0);
+ transform: translate3d(20px, 0, 0); }
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(-2000px, 0, 0);
+ transform: translate3d(-2000px, 0, 0); } }
+@keyframes bounceOutLeft {
+ 20% {
+ opacity: 1;
+ -webkit-transform: translate3d(20px, 0, 0);
+ transform: translate3d(20px, 0, 0); }
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(-2000px, 0, 0);
+ transform: translate3d(-2000px, 0, 0); } }
+.bounceOutLeft {
+ -webkit-animation-name: bounceOutLeft;
+ animation-name: bounceOutLeft; }
+
+@-webkit-keyframes bounceOutRight {
+ 20% {
+ opacity: 1;
+ -webkit-transform: translate3d(-20px, 0, 0);
+ transform: translate3d(-20px, 0, 0); }
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(2000px, 0, 0);
+ transform: translate3d(2000px, 0, 0); } }
+@keyframes bounceOutRight {
+ 20% {
+ opacity: 1;
+ -webkit-transform: translate3d(-20px, 0, 0);
+ transform: translate3d(-20px, 0, 0); }
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(2000px, 0, 0);
+ transform: translate3d(2000px, 0, 0); } }
+.bounceOutRight {
+ -webkit-animation-name: bounceOutRight;
+ animation-name: bounceOutRight; }
+
+@-webkit-keyframes bounceOutUp {
+ 20% {
+ -webkit-transform: translate3d(0, -10px, 0);
+ transform: translate3d(0, -10px, 0); }
+ 40%,
+ 45% {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 20px, 0);
+ transform: translate3d(0, 20px, 0); }
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -2000px, 0);
+ transform: translate3d(0, -2000px, 0); } }
+@keyframes bounceOutUp {
+ 20% {
+ -webkit-transform: translate3d(0, -10px, 0);
+ transform: translate3d(0, -10px, 0); }
+ 40%,
+ 45% {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 20px, 0);
+ transform: translate3d(0, 20px, 0); }
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -2000px, 0);
+ transform: translate3d(0, -2000px, 0); } }
+.bounceOutUp {
+ -webkit-animation-name: bounceOutUp;
+ animation-name: bounceOutUp; }
+
+@-webkit-keyframes fadeIn {
+ from {
+ opacity: 0; }
+ to {
+ opacity: 1; } }
+@keyframes fadeIn {
+ from {
+ opacity: 0; }
+ to {
+ opacity: 1; } }
+.fadeIn {
+ -webkit-animation-name: fadeIn;
+ animation-name: fadeIn; }
+
+@-webkit-keyframes fadeInDown {
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -100%, 0);
+ transform: translate3d(0, -100%, 0); }
+ to {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); } }
+@keyframes fadeInDown {
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -100%, 0);
+ transform: translate3d(0, -100%, 0); }
+ to {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); } }
+.fadeInDown {
+ -webkit-animation-name: fadeInDown;
+ animation-name: fadeInDown; }
+
+@-webkit-keyframes fadeInDownBig {
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -2000px, 0);
+ transform: translate3d(0, -2000px, 0); }
+ to {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); } }
+@keyframes fadeInDownBig {
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -2000px, 0);
+ transform: translate3d(0, -2000px, 0); }
+ to {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); } }
+.fadeInDownBig {
+ -webkit-animation-name: fadeInDownBig;
+ animation-name: fadeInDownBig; }
+
+@-webkit-keyframes fadeInLeft {
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0); }
+ to {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); } }
+@keyframes fadeInLeft {
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0); }
+ to {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); } }
+.fadeInLeft {
+ -webkit-animation-name: fadeInLeft;
+ animation-name: fadeInLeft; }
+
+@-webkit-keyframes fadeInLeftBig {
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(-2000px, 0, 0);
+ transform: translate3d(-2000px, 0, 0); }
+ to {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); } }
+@keyframes fadeInLeftBig {
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(-2000px, 0, 0);
+ transform: translate3d(-2000px, 0, 0); }
+ to {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); } }
+.fadeInLeftBig {
+ -webkit-animation-name: fadeInLeftBig;
+ animation-name: fadeInLeftBig; }
+
+@-webkit-keyframes fadeInRight {
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0); }
+ to {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); } }
+@keyframes fadeInRight {
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0); }
+ to {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); } }
+.fadeInRight {
+ -webkit-animation-name: fadeInRight;
+ animation-name: fadeInRight; }
+
+@-webkit-keyframes fadeInRightBig {
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(2000px, 0, 0);
+ transform: translate3d(2000px, 0, 0); }
+ to {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); } }
+@keyframes fadeInRightBig {
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(2000px, 0, 0);
+ transform: translate3d(2000px, 0, 0); }
+ to {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); } }
+.fadeInRightBig {
+ -webkit-animation-name: fadeInRightBig;
+ animation-name: fadeInRightBig; }
+
+@-webkit-keyframes fadeInUp {
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 100%, 0);
+ transform: translate3d(0, 100%, 0); }
+ to {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); } }
+@keyframes fadeInUp {
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 100%, 0);
+ transform: translate3d(0, 100%, 0); }
+ to {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); } }
+.fadeInUp {
+ -webkit-animation-name: fadeInUp;
+ animation-name: fadeInUp; }
+
+@-webkit-keyframes fadeInUpBig {
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 2000px, 0);
+ transform: translate3d(0, 2000px, 0); }
+ to {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); } }
+@keyframes fadeInUpBig {
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 2000px, 0);
+ transform: translate3d(0, 2000px, 0); }
+ to {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); } }
+.fadeInUpBig {
+ -webkit-animation-name: fadeInUpBig;
+ animation-name: fadeInUpBig; }
+
+@-webkit-keyframes fadeOut {
+ from {
+ opacity: 1; }
+ to {
+ opacity: 0; } }
+@keyframes fadeOut {
+ from {
+ opacity: 1; }
+ to {
+ opacity: 0; } }
+.fadeOut {
+ -webkit-animation-name: fadeOut;
+ animation-name: fadeOut; }
+
+@-webkit-keyframes fadeOutDown {
+ from {
+ opacity: 1; }
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 100%, 0);
+ transform: translate3d(0, 100%, 0); } }
+@keyframes fadeOutDown {
+ from {
+ opacity: 1; }
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 100%, 0);
+ transform: translate3d(0, 100%, 0); } }
+.fadeOutDown {
+ -webkit-animation-name: fadeOutDown;
+ animation-name: fadeOutDown; }
+
+@-webkit-keyframes fadeOutDownBig {
+ from {
+ opacity: 1; }
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 2000px, 0);
+ transform: translate3d(0, 2000px, 0); } }
+@keyframes fadeOutDownBig {
+ from {
+ opacity: 1; }
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 2000px, 0);
+ transform: translate3d(0, 2000px, 0); } }
+.fadeOutDownBig {
+ -webkit-animation-name: fadeOutDownBig;
+ animation-name: fadeOutDownBig; }
+
+@-webkit-keyframes fadeOutLeft {
+ from {
+ opacity: 1; }
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0); } }
+@keyframes fadeOutLeft {
+ from {
+ opacity: 1; }
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0); } }
+.fadeOutLeft {
+ -webkit-animation-name: fadeOutLeft;
+ animation-name: fadeOutLeft; }
+
+@-webkit-keyframes fadeOutLeftBig {
+ from {
+ opacity: 1; }
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(-2000px, 0, 0);
+ transform: translate3d(-2000px, 0, 0); } }
+@keyframes fadeOutLeftBig {
+ from {
+ opacity: 1; }
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(-2000px, 0, 0);
+ transform: translate3d(-2000px, 0, 0); } }
+.fadeOutLeftBig {
+ -webkit-animation-name: fadeOutLeftBig;
+ animation-name: fadeOutLeftBig; }
+
+@-webkit-keyframes fadeOutRight {
+ from {
+ opacity: 1; }
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0); } }
+@keyframes fadeOutRight {
+ from {
+ opacity: 1; }
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0); } }
+.fadeOutRight {
+ -webkit-animation-name: fadeOutRight;
+ animation-name: fadeOutRight; }
+
+@-webkit-keyframes fadeOutRightBig {
+ from {
+ opacity: 1; }
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(2000px, 0, 0);
+ transform: translate3d(2000px, 0, 0); } }
+@keyframes fadeOutRightBig {
+ from {
+ opacity: 1; }
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(2000px, 0, 0);
+ transform: translate3d(2000px, 0, 0); } }
+.fadeOutRightBig {
+ -webkit-animation-name: fadeOutRightBig;
+ animation-name: fadeOutRightBig; }
+
+@-webkit-keyframes fadeOutUp {
+ from {
+ opacity: 1; }
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -100%, 0);
+ transform: translate3d(0, -100%, 0); } }
+@keyframes fadeOutUp {
+ from {
+ opacity: 1; }
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -100%, 0);
+ transform: translate3d(0, -100%, 0); } }
+.fadeOutUp {
+ -webkit-animation-name: fadeOutUp;
+ animation-name: fadeOutUp; }
+
+@-webkit-keyframes fadeOutUpBig {
+ from {
+ opacity: 1; }
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -2000px, 0);
+ transform: translate3d(0, -2000px, 0); } }
+@keyframes fadeOutUpBig {
+ from {
+ opacity: 1; }
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -2000px, 0);
+ transform: translate3d(0, -2000px, 0); } }
+.fadeOutUpBig {
+ -webkit-animation-name: fadeOutUpBig;
+ animation-name: fadeOutUpBig; }
+
+@-webkit-keyframes flip {
+ from {
+ -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, -360deg);
+ transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, -360deg);
+ -webkit-animation-timing-function: ease-out;
+ animation-timing-function: ease-out; }
+ 40% {
+ -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);
+ transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);
+ -webkit-animation-timing-function: ease-out;
+ animation-timing-function: ease-out; }
+ 50% {
+ -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);
+ transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in; }
+ 80% {
+ -webkit-transform: perspective(400px) scale3d(0.95, 0.95, 0.95) translate3d(0, 0, 0) rotate3d(0, 1, 0, 0deg);
+ transform: perspective(400px) scale3d(0.95, 0.95, 0.95) translate3d(0, 0, 0) rotate3d(0, 1, 0, 0deg);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in; }
+ to {
+ -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, 0deg);
+ transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, 0deg);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in; } }
+@keyframes flip {
+ from {
+ -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, -360deg);
+ transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, -360deg);
+ -webkit-animation-timing-function: ease-out;
+ animation-timing-function: ease-out; }
+ 40% {
+ -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);
+ transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);
+ -webkit-animation-timing-function: ease-out;
+ animation-timing-function: ease-out; }
+ 50% {
+ -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);
+ transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in; }
+ 80% {
+ -webkit-transform: perspective(400px) scale3d(0.95, 0.95, 0.95) translate3d(0, 0, 0) rotate3d(0, 1, 0, 0deg);
+ transform: perspective(400px) scale3d(0.95, 0.95, 0.95) translate3d(0, 0, 0) rotate3d(0, 1, 0, 0deg);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in; }
+ to {
+ -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, 0deg);
+ transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, 0deg);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in; } }
+.animated.flip {
+ -webkit-backface-visibility: visible;
+ backface-visibility: visible;
+ -webkit-animation-name: flip;
+ animation-name: flip; }
+
+@-webkit-keyframes flipInX {
+ from {
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+ transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in;
+ opacity: 0; }
+ 40% {
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+ transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in; }
+ 60% {
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+ transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+ opacity: 1; }
+ 80% {
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
+ transform: perspective(400px) rotate3d(1, 0, 0, -5deg); }
+ to {
+ -webkit-transform: perspective(400px);
+ transform: perspective(400px); } }
+@keyframes flipInX {
+ from {
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+ transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in;
+ opacity: 0; }
+ 40% {
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+ transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in; }
+ 60% {
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+ transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+ opacity: 1; }
+ 80% {
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
+ transform: perspective(400px) rotate3d(1, 0, 0, -5deg); }
+ to {
+ -webkit-transform: perspective(400px);
+ transform: perspective(400px); } }
+.flipInX {
+ -webkit-backface-visibility: visible !important;
+ backface-visibility: visible !important;
+ -webkit-animation-name: flipInX;
+ animation-name: flipInX; }
+
+@-webkit-keyframes flipInY {
+ from {
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+ transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in;
+ opacity: 0; }
+ 40% {
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
+ transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in; }
+ 60% {
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
+ transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
+ opacity: 1; }
+ 80% {
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
+ transform: perspective(400px) rotate3d(0, 1, 0, -5deg); }
+ to {
+ -webkit-transform: perspective(400px);
+ transform: perspective(400px); } }
+@keyframes flipInY {
+ from {
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+ transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in;
+ opacity: 0; }
+ 40% {
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
+ transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in; }
+ 60% {
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
+ transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
+ opacity: 1; }
+ 80% {
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
+ transform: perspective(400px) rotate3d(0, 1, 0, -5deg); }
+ to {
+ -webkit-transform: perspective(400px);
+ transform: perspective(400px); } }
+.flipInY {
+ -webkit-backface-visibility: visible !important;
+ backface-visibility: visible !important;
+ -webkit-animation-name: flipInY;
+ animation-name: flipInY; }
+
+@-webkit-keyframes flipOutX {
+ from {
+ -webkit-transform: perspective(400px);
+ transform: perspective(400px); }
+ 30% {
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+ transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+ opacity: 1; }
+ to {
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+ transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+ opacity: 0; } }
+@keyframes flipOutX {
+ from {
+ -webkit-transform: perspective(400px);
+ transform: perspective(400px); }
+ 30% {
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+ transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+ opacity: 1; }
+ to {
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+ transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+ opacity: 0; } }
+.flipOutX {
+ -webkit-animation-duration: 0.75s;
+ animation-duration: 0.75s;
+ -webkit-animation-name: flipOutX;
+ animation-name: flipOutX;
+ -webkit-backface-visibility: visible !important;
+ backface-visibility: visible !important; }
+
+@-webkit-keyframes flipOutY {
+ from {
+ -webkit-transform: perspective(400px);
+ transform: perspective(400px); }
+ 30% {
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
+ transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
+ opacity: 1; }
+ to {
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+ transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+ opacity: 0; } }
+@keyframes flipOutY {
+ from {
+ -webkit-transform: perspective(400px);
+ transform: perspective(400px); }
+ 30% {
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
+ transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
+ opacity: 1; }
+ to {
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+ transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+ opacity: 0; } }
+.flipOutY {
+ -webkit-animation-duration: 0.75s;
+ animation-duration: 0.75s;
+ -webkit-backface-visibility: visible !important;
+ backface-visibility: visible !important;
+ -webkit-animation-name: flipOutY;
+ animation-name: flipOutY; }
+
+@-webkit-keyframes lightSpeedIn {
+ from {
+ -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg);
+ transform: translate3d(100%, 0, 0) skewX(-30deg);
+ opacity: 0; }
+ 60% {
+ -webkit-transform: skewX(20deg);
+ transform: skewX(20deg);
+ opacity: 1; }
+ 80% {
+ -webkit-transform: skewX(-5deg);
+ transform: skewX(-5deg); }
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); } }
+@keyframes lightSpeedIn {
+ from {
+ -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg);
+ transform: translate3d(100%, 0, 0) skewX(-30deg);
+ opacity: 0; }
+ 60% {
+ -webkit-transform: skewX(20deg);
+ transform: skewX(20deg);
+ opacity: 1; }
+ 80% {
+ -webkit-transform: skewX(-5deg);
+ transform: skewX(-5deg); }
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); } }
+.lightSpeedIn {
+ -webkit-animation-name: lightSpeedIn;
+ animation-name: lightSpeedIn;
+ -webkit-animation-timing-function: ease-out;
+ animation-timing-function: ease-out; }
+
+@-webkit-keyframes lightSpeedOut {
+ from {
+ opacity: 1; }
+ to {
+ -webkit-transform: translate3d(100%, 0, 0) skewX(30deg);
+ transform: translate3d(100%, 0, 0) skewX(30deg);
+ opacity: 0; } }
+@keyframes lightSpeedOut {
+ from {
+ opacity: 1; }
+ to {
+ -webkit-transform: translate3d(100%, 0, 0) skewX(30deg);
+ transform: translate3d(100%, 0, 0) skewX(30deg);
+ opacity: 0; } }
+.lightSpeedOut {
+ -webkit-animation-name: lightSpeedOut;
+ animation-name: lightSpeedOut;
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in; }
+
+@-webkit-keyframes rotateIn {
+ from {
+ -webkit-transform-origin: center;
+ transform-origin: center;
+ -webkit-transform: rotate3d(0, 0, 1, -200deg);
+ transform: rotate3d(0, 0, 1, -200deg);
+ opacity: 0; }
+ to {
+ -webkit-transform-origin: center;
+ transform-origin: center;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ opacity: 1; } }
+@keyframes rotateIn {
+ from {
+ -webkit-transform-origin: center;
+ transform-origin: center;
+ -webkit-transform: rotate3d(0, 0, 1, -200deg);
+ transform: rotate3d(0, 0, 1, -200deg);
+ opacity: 0; }
+ to {
+ -webkit-transform-origin: center;
+ transform-origin: center;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ opacity: 1; } }
+.rotateIn {
+ -webkit-animation-name: rotateIn;
+ animation-name: rotateIn; }
+
+@-webkit-keyframes rotateInDownLeft {
+ from {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: rotate3d(0, 0, 1, -45deg);
+ transform: rotate3d(0, 0, 1, -45deg);
+ opacity: 0; }
+ to {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ opacity: 1; } }
+@keyframes rotateInDownLeft {
+ from {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: rotate3d(0, 0, 1, -45deg);
+ transform: rotate3d(0, 0, 1, -45deg);
+ opacity: 0; }
+ to {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ opacity: 1; } }
+.rotateInDownLeft {
+ -webkit-animation-name: rotateInDownLeft;
+ animation-name: rotateInDownLeft; }
+
+@-webkit-keyframes rotateInDownRight {
+ from {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: rotate3d(0, 0, 1, 45deg);
+ transform: rotate3d(0, 0, 1, 45deg);
+ opacity: 0; }
+ to {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ opacity: 1; } }
+@keyframes rotateInDownRight {
+ from {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: rotate3d(0, 0, 1, 45deg);
+ transform: rotate3d(0, 0, 1, 45deg);
+ opacity: 0; }
+ to {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ opacity: 1; } }
+.rotateInDownRight {
+ -webkit-animation-name: rotateInDownRight;
+ animation-name: rotateInDownRight; }
+
+@-webkit-keyframes rotateInUpLeft {
+ from {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: rotate3d(0, 0, 1, 45deg);
+ transform: rotate3d(0, 0, 1, 45deg);
+ opacity: 0; }
+ to {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ opacity: 1; } }
+@keyframes rotateInUpLeft {
+ from {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: rotate3d(0, 0, 1, 45deg);
+ transform: rotate3d(0, 0, 1, 45deg);
+ opacity: 0; }
+ to {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ opacity: 1; } }
+.rotateInUpLeft {
+ -webkit-animation-name: rotateInUpLeft;
+ animation-name: rotateInUpLeft; }
+
+@-webkit-keyframes rotateInUpRight {
+ from {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: rotate3d(0, 0, 1, -90deg);
+ transform: rotate3d(0, 0, 1, -90deg);
+ opacity: 0; }
+ to {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ opacity: 1; } }
+@keyframes rotateInUpRight {
+ from {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: rotate3d(0, 0, 1, -90deg);
+ transform: rotate3d(0, 0, 1, -90deg);
+ opacity: 0; }
+ to {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ opacity: 1; } }
+.rotateInUpRight {
+ -webkit-animation-name: rotateInUpRight;
+ animation-name: rotateInUpRight; }
+
+@-webkit-keyframes rotateOut {
+ from {
+ -webkit-transform-origin: center;
+ transform-origin: center;
+ opacity: 1; }
+ to {
+ -webkit-transform-origin: center;
+ transform-origin: center;
+ -webkit-transform: rotate3d(0, 0, 1, 200deg);
+ transform: rotate3d(0, 0, 1, 200deg);
+ opacity: 0; } }
+@keyframes rotateOut {
+ from {
+ -webkit-transform-origin: center;
+ transform-origin: center;
+ opacity: 1; }
+ to {
+ -webkit-transform-origin: center;
+ transform-origin: center;
+ -webkit-transform: rotate3d(0, 0, 1, 200deg);
+ transform: rotate3d(0, 0, 1, 200deg);
+ opacity: 0; } }
+.rotateOut {
+ -webkit-animation-name: rotateOut;
+ animation-name: rotateOut; }
+
+@-webkit-keyframes rotateOutDownLeft {
+ from {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ opacity: 1; }
+ to {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: rotate3d(0, 0, 1, 45deg);
+ transform: rotate3d(0, 0, 1, 45deg);
+ opacity: 0; } }
+@keyframes rotateOutDownLeft {
+ from {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ opacity: 1; }
+ to {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: rotate3d(0, 0, 1, 45deg);
+ transform: rotate3d(0, 0, 1, 45deg);
+ opacity: 0; } }
+.rotateOutDownLeft {
+ -webkit-animation-name: rotateOutDownLeft;
+ animation-name: rotateOutDownLeft; }
+
+@-webkit-keyframes rotateOutDownRight {
+ from {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ opacity: 1; }
+ to {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: rotate3d(0, 0, 1, -45deg);
+ transform: rotate3d(0, 0, 1, -45deg);
+ opacity: 0; } }
+@keyframes rotateOutDownRight {
+ from {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ opacity: 1; }
+ to {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: rotate3d(0, 0, 1, -45deg);
+ transform: rotate3d(0, 0, 1, -45deg);
+ opacity: 0; } }
+.rotateOutDownRight {
+ -webkit-animation-name: rotateOutDownRight;
+ animation-name: rotateOutDownRight; }
+
+@-webkit-keyframes rotateOutUpLeft {
+ from {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ opacity: 1; }
+ to {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: rotate3d(0, 0, 1, -45deg);
+ transform: rotate3d(0, 0, 1, -45deg);
+ opacity: 0; } }
+@keyframes rotateOutUpLeft {
+ from {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ opacity: 1; }
+ to {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: rotate3d(0, 0, 1, -45deg);
+ transform: rotate3d(0, 0, 1, -45deg);
+ opacity: 0; } }
+.rotateOutUpLeft {
+ -webkit-animation-name: rotateOutUpLeft;
+ animation-name: rotateOutUpLeft; }
+
+@-webkit-keyframes rotateOutUpRight {
+ from {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ opacity: 1; }
+ to {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: rotate3d(0, 0, 1, 90deg);
+ transform: rotate3d(0, 0, 1, 90deg);
+ opacity: 0; } }
+@keyframes rotateOutUpRight {
+ from {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ opacity: 1; }
+ to {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: rotate3d(0, 0, 1, 90deg);
+ transform: rotate3d(0, 0, 1, 90deg);
+ opacity: 0; } }
+.rotateOutUpRight {
+ -webkit-animation-name: rotateOutUpRight;
+ animation-name: rotateOutUpRight; }
+
+@-webkit-keyframes hinge {
+ 0% {
+ -webkit-transform-origin: top left;
+ transform-origin: top left;
+ -webkit-animation-timing-function: ease-in-out;
+ animation-timing-function: ease-in-out; }
+ 20%,
+ 60% {
+ -webkit-transform: rotate3d(0, 0, 1, 80deg);
+ transform: rotate3d(0, 0, 1, 80deg);
+ -webkit-transform-origin: top left;
+ transform-origin: top left;
+ -webkit-animation-timing-function: ease-in-out;
+ animation-timing-function: ease-in-out; }
+ 40%,
+ 80% {
+ -webkit-transform: rotate3d(0, 0, 1, 60deg);
+ transform: rotate3d(0, 0, 1, 60deg);
+ -webkit-transform-origin: top left;
+ transform-origin: top left;
+ -webkit-animation-timing-function: ease-in-out;
+ animation-timing-function: ease-in-out;
+ opacity: 1; }
+ to {
+ -webkit-transform: translate3d(0, 700px, 0);
+ transform: translate3d(0, 700px, 0);
+ opacity: 0; } }
+@keyframes hinge {
+ 0% {
+ -webkit-transform-origin: top left;
+ transform-origin: top left;
+ -webkit-animation-timing-function: ease-in-out;
+ animation-timing-function: ease-in-out; }
+ 20%,
+ 60% {
+ -webkit-transform: rotate3d(0, 0, 1, 80deg);
+ transform: rotate3d(0, 0, 1, 80deg);
+ -webkit-transform-origin: top left;
+ transform-origin: top left;
+ -webkit-animation-timing-function: ease-in-out;
+ animation-timing-function: ease-in-out; }
+ 40%,
+ 80% {
+ -webkit-transform: rotate3d(0, 0, 1, 60deg);
+ transform: rotate3d(0, 0, 1, 60deg);
+ -webkit-transform-origin: top left;
+ transform-origin: top left;
+ -webkit-animation-timing-function: ease-in-out;
+ animation-timing-function: ease-in-out;
+ opacity: 1; }
+ to {
+ -webkit-transform: translate3d(0, 700px, 0);
+ transform: translate3d(0, 700px, 0);
+ opacity: 0; } }
+.hinge {
+ -webkit-animation-duration: 2s;
+ animation-duration: 2s;
+ -webkit-animation-name: hinge;
+ animation-name: hinge; }
+
+@-webkit-keyframes jackInTheBox {
+ from {
+ opacity: 0;
+ -webkit-transform: scale(0.1) rotate(30deg);
+ transform: scale(0.1) rotate(30deg);
+ -webkit-transform-origin: center bottom;
+ transform-origin: center bottom; }
+ 50% {
+ -webkit-transform: rotate(-10deg);
+ transform: rotate(-10deg); }
+ 70% {
+ -webkit-transform: rotate(3deg);
+ transform: rotate(3deg); }
+ to {
+ opacity: 1;
+ -webkit-transform: scale(1);
+ transform: scale(1); } }
+@keyframes jackInTheBox {
+ from {
+ opacity: 0;
+ -webkit-transform: scale(0.1) rotate(30deg);
+ transform: scale(0.1) rotate(30deg);
+ -webkit-transform-origin: center bottom;
+ transform-origin: center bottom; }
+ 50% {
+ -webkit-transform: rotate(-10deg);
+ transform: rotate(-10deg); }
+ 70% {
+ -webkit-transform: rotate(3deg);
+ transform: rotate(3deg); }
+ to {
+ opacity: 1;
+ -webkit-transform: scale(1);
+ transform: scale(1); } }
+.jackInTheBox {
+ -webkit-animation-name: jackInTheBox;
+ animation-name: jackInTheBox; }
+
+/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
+@-webkit-keyframes rollIn {
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
+ transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); }
+ to {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); } }
+@keyframes rollIn {
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
+ transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); }
+ to {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); } }
+.rollIn {
+ -webkit-animation-name: rollIn;
+ animation-name: rollIn; }
+
+/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
+@-webkit-keyframes rollOut {
+ from {
+ opacity: 1; }
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
+ transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); } }
+@keyframes rollOut {
+ from {
+ opacity: 1; }
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
+ transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); } }
+.rollOut {
+ -webkit-animation-name: rollOut;
+ animation-name: rollOut; }
+
+@-webkit-keyframes zoomIn {
+ from {
+ opacity: 0;
+ -webkit-transform: scale3d(0.3, 0.3, 0.3);
+ transform: scale3d(0.3, 0.3, 0.3); }
+ 50% {
+ opacity: 1; } }
+@keyframes zoomIn {
+ from {
+ opacity: 0;
+ -webkit-transform: scale3d(0.3, 0.3, 0.3);
+ transform: scale3d(0.3, 0.3, 0.3); }
+ 50% {
+ opacity: 1; } }
+.zoomIn {
+ -webkit-animation-name: zoomIn;
+ animation-name: zoomIn; }
+
+@-webkit-keyframes zoomInDown {
+ from {
+ opacity: 0;
+ -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);
+ transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
+ animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); }
+ 60% {
+ opacity: 1;
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } }
+@keyframes zoomInDown {
+ from {
+ opacity: 0;
+ -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);
+ transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
+ animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); }
+ 60% {
+ opacity: 1;
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } }
+.zoomInDown {
+ -webkit-animation-name: zoomInDown;
+ animation-name: zoomInDown; }
+
+@-webkit-keyframes zoomInLeft {
+ from {
+ opacity: 0;
+ -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);
+ transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
+ animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); }
+ 60% {
+ opacity: 1;
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } }
+@keyframes zoomInLeft {
+ from {
+ opacity: 0;
+ -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);
+ transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
+ animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); }
+ 60% {
+ opacity: 1;
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } }
+.zoomInLeft {
+ -webkit-animation-name: zoomInLeft;
+ animation-name: zoomInLeft; }
+
+@-webkit-keyframes zoomInRight {
+ from {
+ opacity: 0;
+ -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);
+ transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
+ animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); }
+ 60% {
+ opacity: 1;
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } }
+@keyframes zoomInRight {
+ from {
+ opacity: 0;
+ -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);
+ transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
+ animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); }
+ 60% {
+ opacity: 1;
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } }
+.zoomInRight {
+ -webkit-animation-name: zoomInRight;
+ animation-name: zoomInRight; }
+
+@-webkit-keyframes zoomInUp {
+ from {
+ opacity: 0;
+ -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);
+ transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
+ animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); }
+ 60% {
+ opacity: 1;
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } }
+@keyframes zoomInUp {
+ from {
+ opacity: 0;
+ -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);
+ transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
+ animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); }
+ 60% {
+ opacity: 1;
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } }
+.zoomInUp {
+ -webkit-animation-name: zoomInUp;
+ animation-name: zoomInUp; }
+
+@-webkit-keyframes zoomOut {
+ from {
+ opacity: 1; }
+ 50% {
+ opacity: 0;
+ -webkit-transform: scale3d(0.3, 0.3, 0.3);
+ transform: scale3d(0.3, 0.3, 0.3); }
+ to {
+ opacity: 0; } }
+@keyframes zoomOut {
+ from {
+ opacity: 1; }
+ 50% {
+ opacity: 0;
+ -webkit-transform: scale3d(0.3, 0.3, 0.3);
+ transform: scale3d(0.3, 0.3, 0.3); }
+ to {
+ opacity: 0; } }
+.zoomOut {
+ -webkit-animation-name: zoomOut;
+ animation-name: zoomOut; }
+
+@-webkit-keyframes zoomOutDown {
+ 40% {
+ opacity: 1;
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
+ animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); }
+ to {
+ opacity: 0;
+ -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);
+ transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);
+ -webkit-transform-origin: center bottom;
+ transform-origin: center bottom;
+ -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } }
+@keyframes zoomOutDown {
+ 40% {
+ opacity: 1;
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
+ animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); }
+ to {
+ opacity: 0;
+ -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);
+ transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);
+ -webkit-transform-origin: center bottom;
+ transform-origin: center bottom;
+ -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } }
+.zoomOutDown {
+ -webkit-animation-name: zoomOutDown;
+ animation-name: zoomOutDown; }
+
+@-webkit-keyframes zoomOutLeft {
+ 40% {
+ opacity: 1;
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0);
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0); }
+ to {
+ opacity: 0;
+ -webkit-transform: scale(0.1) translate3d(-2000px, 0, 0);
+ transform: scale(0.1) translate3d(-2000px, 0, 0);
+ -webkit-transform-origin: left center;
+ transform-origin: left center; } }
+@keyframes zoomOutLeft {
+ 40% {
+ opacity: 1;
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0);
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0); }
+ to {
+ opacity: 0;
+ -webkit-transform: scale(0.1) translate3d(-2000px, 0, 0);
+ transform: scale(0.1) translate3d(-2000px, 0, 0);
+ -webkit-transform-origin: left center;
+ transform-origin: left center; } }
+.zoomOutLeft {
+ -webkit-animation-name: zoomOutLeft;
+ animation-name: zoomOutLeft; }
+
+@-webkit-keyframes zoomOutRight {
+ 40% {
+ opacity: 1;
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0);
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0); }
+ to {
+ opacity: 0;
+ -webkit-transform: scale(0.1) translate3d(2000px, 0, 0);
+ transform: scale(0.1) translate3d(2000px, 0, 0);
+ -webkit-transform-origin: right center;
+ transform-origin: right center; } }
+@keyframes zoomOutRight {
+ 40% {
+ opacity: 1;
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0);
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0); }
+ to {
+ opacity: 0;
+ -webkit-transform: scale(0.1) translate3d(2000px, 0, 0);
+ transform: scale(0.1) translate3d(2000px, 0, 0);
+ -webkit-transform-origin: right center;
+ transform-origin: right center; } }
+.zoomOutRight {
+ -webkit-animation-name: zoomOutRight;
+ animation-name: zoomOutRight; }
+
+@-webkit-keyframes zoomOutUp {
+ 40% {
+ opacity: 1;
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
+ animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); }
+ to {
+ opacity: 0;
+ -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);
+ transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);
+ -webkit-transform-origin: center bottom;
+ transform-origin: center bottom;
+ -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } }
+@keyframes zoomOutUp {
+ 40% {
+ opacity: 1;
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
+ animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); }
+ to {
+ opacity: 0;
+ -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);
+ transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);
+ -webkit-transform-origin: center bottom;
+ transform-origin: center bottom;
+ -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } }
+.zoomOutUp {
+ -webkit-animation-name: zoomOutUp;
+ animation-name: zoomOutUp; }
+
+@-webkit-keyframes slideInDown {
+ from {
+ -webkit-transform: translate3d(0, -100%, 0);
+ transform: translate3d(0, -100%, 0);
+ visibility: visible; }
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); } }
+@keyframes slideInDown {
+ from {
+ -webkit-transform: translate3d(0, -100%, 0);
+ transform: translate3d(0, -100%, 0);
+ visibility: visible; }
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); } }
+.slideInDown {
+ -webkit-animation-name: slideInDown;
+ animation-name: slideInDown; }
+
+@-webkit-keyframes slideInLeft {
+ from {
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0);
+ visibility: visible; }
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); } }
+@keyframes slideInLeft {
+ from {
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0);
+ visibility: visible; }
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); } }
+.slideInLeft {
+ -webkit-animation-name: slideInLeft;
+ animation-name: slideInLeft; }
+
+@-webkit-keyframes slideInRight {
+ from {
+ -webkit-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0);
+ visibility: visible; }
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); } }
+@keyframes slideInRight {
+ from {
+ -webkit-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0);
+ visibility: visible; }
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); } }
+.slideInRight {
+ -webkit-animation-name: slideInRight;
+ animation-name: slideInRight; }
+
+@-webkit-keyframes slideInUp {
+ from {
+ -webkit-transform: translate3d(0, 100%, 0);
+ transform: translate3d(0, 100%, 0);
+ visibility: visible; }
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); } }
+@keyframes slideInUp {
+ from {
+ -webkit-transform: translate3d(0, 100%, 0);
+ transform: translate3d(0, 100%, 0);
+ visibility: visible; }
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); } }
+.slideInUp {
+ -webkit-animation-name: slideInUp;
+ animation-name: slideInUp; }
+
+@-webkit-keyframes slideOutDown {
+ from {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); }
+ to {
+ visibility: hidden;
+ -webkit-transform: translate3d(0, 100%, 0);
+ transform: translate3d(0, 100%, 0); } }
+@keyframes slideOutDown {
+ from {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); }
+ to {
+ visibility: hidden;
+ -webkit-transform: translate3d(0, 100%, 0);
+ transform: translate3d(0, 100%, 0); } }
+.slideOutDown {
+ -webkit-animation-name: slideOutDown;
+ animation-name: slideOutDown; }
+
+@-webkit-keyframes slideOutLeft {
+ from {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); }
+ to {
+ visibility: hidden;
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0); } }
+@keyframes slideOutLeft {
+ from {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); }
+ to {
+ visibility: hidden;
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0); } }
+.slideOutLeft {
+ -webkit-animation-name: slideOutLeft;
+ animation-name: slideOutLeft; }
+
+@-webkit-keyframes slideOutRight {
+ from {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); }
+ to {
+ visibility: hidden;
+ -webkit-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0); } }
+@keyframes slideOutRight {
+ from {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); }
+ to {
+ visibility: hidden;
+ -webkit-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0); } }
+.slideOutRight {
+ -webkit-animation-name: slideOutRight;
+ animation-name: slideOutRight; }
+
+@-webkit-keyframes slideOutUp {
+ from {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); }
+ to {
+ visibility: hidden;
+ -webkit-transform: translate3d(0, -100%, 0);
+ transform: translate3d(0, -100%, 0); } }
+@keyframes slideOutUp {
+ from {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); }
+ to {
+ visibility: hidden;
+ -webkit-transform: translate3d(0, -100%, 0);
+ transform: translate3d(0, -100%, 0); } }
+.slideOutUp {
+ -webkit-animation-name: slideOutUp;
+ animation-name: slideOutUp; }
+
+.animated {
+ -webkit-animation-duration: 1s;
+ animation-duration: 1s;
+ -webkit-animation-fill-mode: both;
+ animation-fill-mode: both; }
+
+.animated.infinite {
+ -webkit-animation-iteration-count: infinite;
+ animation-iteration-count: infinite; }
+
+.animated.delay-1s {
+ -webkit-animation-delay: 1s;
+ animation-delay: 1s; }
+
+.animated.delay-2s {
+ -webkit-animation-delay: 2s;
+ animation-delay: 2s; }
+
+.animated.delay-3s {
+ -webkit-animation-delay: 3s;
+ animation-delay: 3s; }
+
+.animated.delay-4s {
+ -webkit-animation-delay: 4s;
+ animation-delay: 4s; }
+
+.animated.delay-5s {
+ -webkit-animation-delay: 5s;
+ animation-delay: 5s; }
+
+.animated.fast {
+ -webkit-animation-duration: 800ms;
+ animation-duration: 800ms; }
+
+.animated.faster {
+ -webkit-animation-duration: 500ms;
+ animation-duration: 500ms; }
+
+.animated.slow {
+ -webkit-animation-duration: 2s;
+ animation-duration: 2s; }
+
+.animated.slower {
+ -webkit-animation-duration: 3s;
+ animation-duration: 3s; }
+
+@media (print), (prefers-reduced-motion) {
+ .animated {
+ -webkit-animation: unset !important;
+ animation: unset !important;
+ -webkit-transition: none !important;
+ transition: none !important; } }
+.avatar {
+ background-image: url(/img/backup.png);
+ background-position: center top;
+ background-size: cover;
+ background-repeat: no-repeat;
+ background-color: white;
+ border-radius: 50%;
+ width: 3.2rem;
+ height: 3.2rem; }
+ .avatar.-xl {
+ width: 6.4rem;
+ height: 6.4rem; }
+ .avatar.-l {
+ width: 4.8rem;
+ height: 4.8rem; }
+ .avatar.-s {
+ width: 2.4rem;
+ height: 2.4rem; }
+ .avatar.-xs {
+ width: 1.6rem;
+ height: 1.6rem; }
+
+*,
+*:after,
+*:before {
+ -webkit-box-sizing: inherit;
+ box-sizing: inherit; }
+
+html {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ font-size: 62.5%; }
+
+body {
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ min-height: 100vh;
+ font-size: 1.6em;
+ line-height: 1.6;
+ font-family: "Roboto", "Helvetica Neue", "Helvetica", "Arial", sans-serif;
+ font-weight: 300;
+ letter-spacing: 0.01em; }
+
+main {
+ -webkit-box-flex: 1;
+ -ms-flex: 1;
+ flex: 1; }
+
+.button-text, .button-outlined, .button-contained, .button-toggle {
+ display: inline-block;
+ -webkit-transition: 0.3s background-color, 0.3s opacity;
+ transition: 0.3s background-color, 0.3s opacity;
+ border: 1px solid transparent;
+ border-radius: 0.3rem;
+ padding: 1rem 1.6rem 0.9rem;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ font-size: 1.4rem;
+ font-weight: 700;
+ text-align: center;
+ vertical-align: top;
+ text-transform: uppercase;
+ letter-spacing: 0.15rem; }
+ .button-text:focus, .button-outlined:focus, .button-contained:focus, .button-toggle:focus {
+ outline: 0; }
+ [disabled].button-text, [disabled].button-outlined, [disabled].button-contained, [disabled].button-toggle {
+ pointer-events: none;
+ color: #6c757d; }
+
+.button-text:hover, .button-outlined:hover, .button-toggle:hover {
+ background-color: rgba(131, 163, 136, 0.05); }
+.button-text .active, .button-outlined .active, .button-toggle .active, .button-text:active, .button-outlined:active, .button-toggle:active, .button-text:focus, .button-outlined:focus, .button-toggle:focus, .button-text:checked, .button-outlined:checked, .button-toggle:checked {
+ background-color: rgba(131, 163, 136, 0.11); }
+
+.button-contained:hover {
+ background-color: #65d775; }
+.button-contained .active, .button-contained:active, .button-contained:focus, .button-contained:checked {
+ background-color: #3dcc51; }
+[disabled].button-contained {
+ background-color: #dee2e6; }
+
+.button-text {
+ background-color: transparent;
+ color: #54D266; }
+
+.button-outlined {
+ border-color: #ced4da;
+ background-color: transparent;
+ color: #54D266; }
+
+.button-contained {
+ background-color: #54D266;
+ color: white; }
+
+.button-toggle {
+ border-color: #ced4da;
+ padding: 0.8rem 1rem 0.7rem;
+ min-width: 4.1rem;
+ height: 4.1rem;
+ background-color: transparent; }
+ .button-toggle > img, .button-toggle > svg {
+ -webkit-transform: translateY(0.5rem);
+ transform: translateY(0.5rem);
+ margin-top: -1rem;
+ width: 2rem;
+ height: 2rem; }
+
+.button-group {
+ display: -webkit-inline-box;
+ display: -ms-inline-flexbox;
+ display: inline-flex; }
+ .button-group > *:not(:first-child) {
+ border-left: none;
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0; }
+ .button-group > *:not(:last-child) {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0; }
+
+.button-ripple {
+ position: relative;
+ overflow: hidden;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); }
+ .button-ripple:after {
+ content: "";
+ display: block;
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+ pointer-events: none;
+ background-image: radial-gradient(circle, #b9d9be 10%, transparent 10.01%);
+ background-repeat: no-repeat;
+ background-position: 50%;
+ -webkit-transform: scale(10, 10);
+ transform: scale(10, 10);
+ opacity: 0;
+ -webkit-transition: opacity 1s, -webkit-transform 0.5s;
+ transition: opacity 1s, -webkit-transform 0.5s;
+ transition: transform 0.5s, opacity 1s;
+ transition: transform 0.5s, opacity 1s, -webkit-transform 0.5s; }
+ .button-ripple:active:after {
+ -webkit-transform: scale(0, 0);
+ transform: scale(0, 0);
+ opacity: 0.3;
+ -webkit-transition: 0s;
+ transition: 0s; }
+
+.button-block {
+ width: 100%; }
+
+body {
+ background-color: #eef2f6; }
+
+.card {
+ position: relative;
+ -webkit-box-shadow: 0 4px 6px 0 rgba(0, 0, 0, 0.2);
+ box-shadow: 0 4px 6px 0 rgba(0, 0, 0, 0.2);
+ border-radius: 2px;
+ width: 200px;
+ overflow: hidden; }
+
+.card-image {
+ width: 100%;
+ height: 200px;
+ background-image: url(/img/tba.png);
+ background-position: center;
+ background-size: cover;
+ background-repeat: no-repeat;
+ background-color: white; }
+
+.card-details {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ position: absolute;
+ bottom: 0;
+ width: 100%;
+ min-height: 60px;
+ background-image: -webkit-gradient(linear, left bottom, left top, from(rgba(0, 0, 0, 0.75)), to(transparent));
+ background-image: linear-gradient(0deg, rgba(0, 0, 0, 0.75), transparent);
+ color: white; }
+
+.dropdown {
+ position: relative; }
+ .dropdown:hover > .list {
+ top: 100%;
+ left: 0; }
+ .dropdown .dropdown:hover > .list {
+ top: 0;
+ left: 100%; }
+ .dropdown.-left:hover > .list {
+ right: 0;
+ left: unset; }
+ .dropdown.-left .dropdown:hover > .list {
+ right: 100%;
+ left: unset; }
+ .dropdown:hover > .list {
+ display: block;
+ -webkit-animation: fadeInUp 0.2s;
+ animation: fadeInUp 0.2s; }
+
+.list {
+ position: absolute;
+ display: none;
+ padding: 0.5rem;
+ border-radius: 1.2rem;
+ width: 15rem;
+ background-color: #212529; }
+
+.list > * {
+ display: block; }
+
+.list > a {
+ border-radius: 1rem;
+ padding: 0.5rem 2rem 0.75rem;
+ -webkit-text-decoration-line: none;
+ text-decoration-line: none;
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
+ font-weight: 500;
+ color: #adb5bd; }
+
+.list > a:hover {
+ background-color: #343a40;
+ color: #dee2e6; }
+
+.float-label {
+ position: relative; }
+
+.float-label > input {
+ padding: 1.8rem 2.4rem 1.6rem; }
+
+.float-label > label {
+ position: absolute;
+ top: 50%;
+ left: 2.4rem;
+ -webkit-transform: translateY(-50%);
+ transform: translateY(-50%);
+ opacity: 0;
+ -webkit-transition: opacity 0.3s ease, -webkit-transform 0.3s ease;
+ transition: opacity 0.3s ease, -webkit-transform 0.3s ease;
+ transition: opacity 0.3s ease, transform 0.3s ease;
+ transition: opacity 0.3s ease, transform 0.3s ease, -webkit-transform 0.3s ease;
+ font-size: 1.2rem; }
+
+.float-label input:not(:placeholder-shown) {
+ padding: 2.4rem 2.4rem 1rem; }
+
+.float-label input:not(:placeholder-shown) + label {
+ -webkit-transform: translateY(calc(-50% - 1.6rem));
+ transform: translateY(calc(-50% - 1.6rem));
+ opacity: 0.5; }
+
+header {
+ background-color: #343a40; }
+
+.bar {
+ background-color: #e9ecef; }
+
+.bar .xp {
+ -webkit-transition: 0.5s width;
+ transition: 0.5s width;
+ width: 0%;
+ height: 0.8rem;
+ background-color: #ccf0d1;
+ background-image: url("data:image/svg+xml,%3Csvg width='40' height='40' viewBox='0 0 40 40' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='%2354d266' fill-opacity='0.81' fill-rule='evenodd'%3E%3Cpath d='M0 40L40 0H20L0 20M40 40V20L20 40'/%3E%3C/g%3E%3C/svg%3E");
+ background-size: contain; }
+
+.header {
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ margin: 0 auto;
+ padding: 2rem;
+ max-width: 100rem; }
+
+.header.-main {
+ padding-bottom: 16rem; }
+
+.header .profile {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ padding: 0.5rem 0;
+ -webkit-text-decoration-line: none;
+ text-decoration-line: none; }
+
+.header .profile .username {
+ -webkit-transition: 0.3s color;
+ transition: 0.3s color;
+ margin-right: 1.2rem;
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
+ font-weight: 500;
+ color: #adb5bd; }
+
+.header .profile:hover .username {
+ color: #dee2e6; }
+
+.header .profile .username.-active {
+ color: #f8f9fa; }
+
+nav {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex; }
+
+nav .item {
+ -webkit-transition: 0.3s color;
+ transition: 0.3s color;
+ -webkit-text-decoration-line: none;
+ text-decoration-line: none;
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
+ font-weight: 500;
+ color: #adb5bd; }
+
+nav .item:hover {
+ color: #dee2e6; }
+
+nav .item.-active {
+ color: #f8f9fa; }
+
+nav .item + .item {
+ margin-left: 4rem; }
+
+.header .brand {
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ border-radius: 50%;
+ width: 5rem;
+ height: 5rem;
+ background-color: #f8f9fa; }
+
+.header .brand img {
+ width: 80%; }
+
+.login-wrapper {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex; }
+
+.login-container {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ z-index: 1000;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-shadow: 0 0 6px 0 rgba(0, 0, 0, 0.2), 0 0 12px 0 rgba(0, 0, 0, 0.2);
+ box-shadow: 0 0 6px 0 rgba(0, 0, 0, 0.2), 0 0 12px 0 rgba(0, 0, 0, 0.2);
+ width: 100%; }
+
+.login {
+ width: 100%; }
+
+.login-title-container {
+ margin: 0 auto 2rem;
+ padding: 0 2rem;
+ max-width: 40rem; }
+
+.login-title {
+ display: inline-block;
+ opacity: 0.8;
+ margin: 0;
+ border-bottom: 0.3rem solid #54D266; }
+
+.login .login-input, .login .login-controllers {
+ margin: 0 auto;
+ padding: 0 2rem;
+ max-width: 40rem; }
+
+.login input[type=password], .login input[type=email] {
+ margin-bottom: 1rem;
+ -webkit-box-shadow: inset 0.1rem 0.1rem rgba(0, 0, 0, 0.1), 0 -0.1rem 0 rgba(255, 255, 255, 0.15);
+ box-shadow: inset 0.1rem 0.1rem rgba(0, 0, 0, 0.1), 0 -0.1rem 0 rgba(255, 255, 255, 0.15);
+ border-radius: 5000rem;
+ border: none;
+ width: 100%; }
+
+.login input:focus {
+ outline: none; }
+
+.login input[type=submit] {
+ position: relative;
+ border-radius: 5000rem;
+ cursor: pointer; }
+
+.image {
+ position: absolute;
+ top: 50%;
+ left: 1.4rem;
+ -webkit-transform: translateY(-50%);
+ transform: translateY(-50%);
+ width: 2.4rem;
+ vertical-align: top; }
+
+.marg-left {
+ margin-left: 1rem; }
+
+.login-controllers {
+ -webkit-box-pack: end;
+ -ms-flex-pack: end;
+ justify-content: flex-end;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex; }
+
+.login-controllers > * + * {
+ margin-left: 0.5rem; }
+
+.login-controllers * {
+ border-radius: 500rem;
+ -webkit-text-decoration-line: none;
+ text-decoration-line: none; }
+
+.login-image {
+ display: none;
+ background-image: url(/img/login.jpg);
+ background-position: left center;
+ background-size: cover;
+ background-repeat: no-repeat;
+ background-color: white; }
+
+@media (min-width: 60rem) {
+ .login-container {
+ min-width: 50rem;
+ max-width: 38.2%; }
+
+ .login-image {
+ display: block;
+ width: 61.8%; } }
+.float-left {
+ float: left; }
+
+.float-right {
+ float: right; }
+
+.clearfix::after {
+ content: " ";
+ clear: both;
+ display: table; }
+
+/*# sourceMappingURL=main.css.map */
+
+
+/*
+ * Added the part for the chat after this needs to be changed/replaced/fixed
+ */
+
+ *,
+ *:before,
+ *:after {
+ box-sizing: inherit;
+}
+
+/*Chat styling*/
+.chatcontainer {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+
+.userSettings {
+ margin-bottom: 20px;
+}
+
+.chat {
+ max-width: 400px;
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+}
+
+.chat #chatOutput {
+ overflow-y: scroll;
+ height: 280px;
+ width: 100%;
+ border: 1px solid #777;
+}
+
+.chat #chatOutput p {
+ margin: 0;
+ padding: 5px;
+ border-bottom: 1px solid #bbb;
+ word-break: break-all;
+}
+
+.chat #chatInput {
+ width: 75%;
+}
+
+.chat #chatSend {
+ width: 25%;
+}
\ No newline at end of file
diff --git a/assets/css/main.css.map b/assets/css/main.css.map
new file mode 100644
index 0000000..2112a8f
--- /dev/null
+++ b/assets/css/main.css.map
@@ -0,0 +1,7 @@
+{
+"version": 3,
+"mappings": "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",
+"sources": ["../scss/vendor/_normalize.scss","../scss/vendor/_animate.scss","../scss/partials/_avatar.scss","../scss/partials/_base.scss","../scss/partials/_button.scss","../scss/modules/_color.scss","../scss/partials/_card.scss","../scss/partials/_dropdown.scss","../scss/partials/_float-label.scss","../scss/partials/_header.scss","../scss/partials/_login.scss","../scss/partials/_utility.scss"],
+"names": [],
+"file": "main.css"
+}
diff --git a/assets/img/avatar.jpg b/assets/img/avatar.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..97ed1e1c97272f18b40eef1fed0ed232897d4c08
GIT binary patch
literal 62562
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