diff --git a/.idea/ThemeParkPanel Laravel.iml b/.idea/ThemeParkPanel.iml
similarity index 99%
rename from .idea/ThemeParkPanel Laravel.iml
rename to .idea/ThemeParkPanel.iml
index b8f0ee8..06a78b0 100644
--- a/.idea/ThemeParkPanel Laravel.iml
+++ b/.idea/ThemeParkPanel.iml
@@ -5,109 +5,109 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
\ No newline at end of file
+
diff --git a/.idea/modules.xml b/.idea/modules.xml
index 6a07b85..2f57d2d 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -2,7 +2,7 @@
-
+
-
\ No newline at end of file
+
diff --git a/.idea/php.xml b/.idea/php.xml
index 2af9c1c..63ec9fc 100644
--- a/.idea/php.xml
+++ b/.idea/php.xml
@@ -2,107 +2,107 @@
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -111,4 +111,4 @@
-
\ No newline at end of file
+
diff --git a/app/Cache/Cache.php b/app/Cache/Cache.php
index 3c525cf..d46efdf 100644
--- a/app/Cache/Cache.php
+++ b/app/Cache/Cache.php
@@ -3,161 +3,92 @@ namespace App\Cache;
class Cache {
- /**
- * Get Username from API or cache
- *
- * @param $uuid
- * @return bool|mixed The username if success or the UUID if failed
- */
public static function getUsername($uuid) {
- if (file_exists(storage_path('app/uuid/'.$uuid.'.json'))) {
+ if(file_exists(storage_path('app/uuid/'.$uuid.'.json'))) {
$json = file_get_contents(storage_path('app/uuid/'.$uuid.'.json'));
$json = json_decode($json, true);
- if ((time() - strtotime($json['time'])) > 3600) {
- $username = self::getUsernameUncached($uuid);
- if ($username == false) {
- return $json['name'];
- } else {
- $json = [];
- $json['id'] = $uuid;
- $json['name'] = $username;
- self::saveJson($json);
+ if((time() - strtotime($json['time'])) > 3600) {
+ $json = file_get_contents('https://api.mojang.com/user/profiles/'.$uuid.'/names');
+ if(empty($json)) {
+ $json = file_get_contents(storage_path('app/uuid/'.$uuid.'.json'));
+ $json = json_decode($json, true);
return $json['name'];
}
+
+ $json = json_decode($json, true);
+ if(isset($json['error'])) {
+ $json = file_get_contents(storage_path('app/uuid/'.$uuid.'.json'));
+ $json = json_decode($json, true);
+ return $json['name'];
+ }
+
+ $name = $json[count($json) -1]['name'];
+ $json = [];
+ $json['id'] = $uuid;
+ $json['name'] = $name;
+ self::saveJson($json);
+ return $json['name'];
} else {
return $json['name'];
}
} else {
- $username = self::getUsernameUncached($uuid);
- if ($username === $uuid) {
+ $json = file_get_contents('https://api.mojang.com/user/profiles/'.$uuid.'/names');
+ if(empty($json))
return $uuid;
- } else {
- $json = [];
- $json['id'] = $uuid;
- $json['name'] = $username;
- self::saveJson($json);
- return $json['name'];
- }
+
+ $json = json_decode($json, true);
+ if(isset($json['error']))
+ return $uuid;
+
+ $name = $json[count($json) -1]['name'];
+ $json = [];
+ $json['id'] = $uuid;
+ $json['name'] = $name;
+ self::saveJson($json);
+ return $json['name'];
}
}
- /**
- * Get UUID from API or cache
- *
- * @param $username
- * @return bool|mixed The UUID if success or the username if failed
- */
public static function getUUID($username) {
foreach(glob(storage_path('app/uuid/*')) as $file) {
$json = file_get_contents($file);
$json = json_decode($json, true);
+ if($json['name'] !== $username)
+ continue;
- if ($json['name'] !== $username) continue;
-
- if ((time() - strtotime($json['time'])) > 3600) {
- $uuid = self::getUUIDUncached($username);
- if ($uuid == false) {
+ if((time() - strtotime($json['time'])) > 3600) {
+ $json = file_get_contents('https://api.mojang.com/users/profiles/minecraft/'.$username);
+ if(empty($json)) {
unlink(storage_path('app/uuid/'.$file));
- return $json['name'];
- } else {
- $json = [];
- $json['id'] = $uuid;
- $json['name'] = $username;
- self::saveJson($json);
- return $json['id'];
+ return $username;
}
+
+ $json = json_decode($json, true);
+ if(isset($json['error'])) {
+ unlink(storage_path('app/uuid/'.$file));
+ return $username;
+ }
+
+ self::saveJson($json);
+ return $json['id'];
} else {
return $json['id'];
}
}
- $uuid = self::getUUIDUncached($username);
- if ($uuid == false) {
+ $json = file_get_contents('https://api.mojang.com/users/profiles/minecraft/'.$username);
+ if(empty($json))
return $username;
- } else {
- $json = [];
- $json['id'] = $uuid;
- $json['name'] = $username;
- self::saveJson($json);
- return $json['id'];
- }
+
+ $json = json_decode($json, true);
+ if(isset($json['error']))
+ return $username;
+
+ self::saveJson($json);
+ return $json['id'];
}
- /**
- * Get the UUID by the username
- *
- * @param $username
- * @return bool|mixed The UUID without dashes, or false if failed
- */
- private static function getUUIDUncached($username) {
- $profile = self::getProfile($username);
- if (is_array($profile) and isset($profile['id']))
- return $profile['id'];
-
- return false;
- }
-
- /**
- * Get the profile (username & UUID) from the username
- *
- * @uses http://wiki.vg/Mojang_API#Username_-.3E_UUID_at_time
- *
- * @param $username
- * @return bool|mixed Array with ID and name, or false if failed
- */
- private static function getProfile($username) {
- if (self::isValidUsername($username)) {
- $json = file_get_contents('https://api.mojang.com/users/profiles/minecraft/' . $username);
- if (!empty($json)) {
- $data = json_decode($json, true);
- if (is_array($data) and !empty($data)) {
- return $data;
- }
- }
- }
- return false;
- }
-
- /**
- * Get the username from the UUID
- *
- * @uses http://wiki.vg/Mojang_API#UUID_-.3E_Name_history
- *
- * @param $uuid
- * @return bool|mixed Username, or false if failed
- */
- private static function getUsernameUncached($uuid) {
- if (is_string($uuid)) {
- $json = file_get_contents('https://api.mojang.com/user/profiles/' . $uuid . '/names');
- if (!empty($json)) {
- $data = json_decode($json, true);
- if (!empty($data) and is_array($data)) {
- $last = array_pop($data);
- if (is_array($last) and isset($last['name'])) {
- return $last['name'];
- }
- }
- }
- }
- return false;
- }
-
- /**
- * Check if the username is correct.
- *
- * @param $username
- * @return bool Valid or not
- */
- private static function isValidUsername($username) {
- return is_string($username) and strlen($username) >= 2 and strlen($username) <= 16 and ctype_alnum(str_replace('_', '', $username));
- }
-
- /**
- * Save the JSON to a file
- *
- * @param $json
- */
- private static function saveJson($json) {
+ public static function saveJson($json) {
$array = [
'id' => $json['id'],
'name' => $json['name'],
diff --git a/app/Color/MinecraftColor.php b/app/Color/MinecraftColor.php
index ad07bc5..92f0865 100644
--- a/app/Color/MinecraftColor.php
+++ b/app/Color/MinecraftColor.php
@@ -4,26 +4,26 @@ namespace App\Color;
class MinecraftColor {
private static $array = [
- "&0" => "#333",
- "&1" => "#2980b9",
- "&2" => "#27ae60",
- "&3" => "#01a3a4",
- "&4" => "#c0392b",
- "&5" => "#8e44ad",
- "&6" => "#f39c12",
- "&7" => "#95a5a6",
- "&8" => "#7f8c8d",
- "&9" => "#3498db",
- "&a" => "#2ecc71",
- "&b" => "#00d2d3",
- "&c" => "#e74c3c",
- "&d" => "#f368e0",
- "&e" => "#f1c40f",
- "&f" => "#bdc3c7"
+ "&0" => "#000000",
+ "&1" => "#0000AA",
+ "&2" => "#00AA00",
+ "&3" => "#00AAAA",
+ "&4" => "#AA0000",
+ "&5" => "#AA00AA",
+ "&6" => "#FFAA00",
+ "&7" => "#AAAAAA",
+ "&8" => "#555555",
+ "&9" => "#5555FF",
+ "&a" => "#55FF55",
+ "&b" => "#55FFFF",
+ "&c" => "#FF5555",
+ "&d" => "#FF55FF",
+ "&e" => "#FFFF55",
+ "&f" => "#FFFFFF"
];
private static $none = [
- "&l", "&m", "&n", "&o", "&r",
+ "&k", "&l", "&m", "&n", "&o", "&r",
];
public static function color($text) {
diff --git a/app/Http/Controllers/ControlController.php b/app/Http/Controllers/ControlController.php
deleted file mode 100644
index 0808e10..0000000
--- a/app/Http/Controllers/ControlController.php
+++ /dev/null
@@ -1,45 +0,0 @@
-middleware(['auth', 'verified', '2fa']);
- }
-
- /**
- * Show the application dashboard.
- *
- * @param $attraction_id
- * @param $pin
- * @return \Illuminate\Contracts\Support\Renderable
- */
- public function index($attraction_id, $pin)
- {
- if(!preg_match('/^([0-9]){9}$/', $pin))
- return Redirect::route('status');
-
- $data = DB::table('attraction')->select('name')->where('id', '=', $attraction_id)->first();
- if(empty($data))
- return Redirect::route('status');
-
- return view('control')->with([
- 'attraction_id' => $attraction_id,
- 'attraction_name' => MinecraftColor::stripColor( $data->name),
- 'pin' => $pin
- ]);
- }
-
-}
diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php
index f232d72..f2327e8 100644
--- a/app/Http/Controllers/HomeController.php
+++ b/app/Http/Controllers/HomeController.php
@@ -26,8 +26,11 @@ class HomeController extends Controller
*/
public function index()
{
+ if(!env('HOME_PAGE', false))
+ return redirect()->route('status');
+
return view('home')->with([
- 'message' => ''
+ 'message' => \App\Message::orderByDesc('id')->first()
]);
}
diff --git a/app/Http/Controllers/OpenAudioMCController.php b/app/Http/Controllers/OpenAudioMCController.php
index 10a0f37..b30b367 100644
--- a/app/Http/Controllers/OpenAudioMCController.php
+++ b/app/Http/Controllers/OpenAudioMCController.php
@@ -2,7 +2,6 @@
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Auth;
-use Illuminate\Support\Facades\Redirect;
class OpenAudioMCController extends Controller
{
@@ -30,17 +29,11 @@ class OpenAudioMCController extends Controller
if(!filter_var($url, FILTER_VALIDATE_URL))
return view('openaudiomc')->with(['type' => 1]);
- $key = explode('/', $url);
- $key = $key[count($key) - 1];
- if(!preg_match('/^([a-zA-Z0-9]{8})\-([a-zA-Z0-9]{4})\-([a-zA-Z0-9]{4})\-([a-zA-Z0-9]{4})\-([a-zA-Z0-9]{12})$/', $key))
- return view('openaudiomc')->with(['type' => 1]);
-
- $url = str_replace('%UUID%', Auth::user()->fixedUUID(), $url);
$result = file_get_contents($url);
- if(!$this->isJson($result))
+ $json = json_decode($result);
+ if(empty($result) || json_last_error() != JSON_ERROR_NONE)
return view('openaudiomc')->with(['type' => 1]);
- $json = json_decode($result);
if(isset($json->errors) && !empty($json->errors))
return view('openaudiomc')->with(['type' => 2]);
@@ -48,23 +41,28 @@ class OpenAudioMCController extends Controller
return view('openaudiomc')->with(['type' => 2]);
$response = $json->response;
- if(!isset($response->isConnected) || !isset($response->sessionUrl))
+ if(!isset($response->players) || empty($response->players))
return view('openaudiomc')->with(['type' => 2]);
- if($response->isConnected)
+ $response = $response->players;
+
+ $uuid = Auth::user()->fixedUUID();
+ $user = null;
+ foreach ($response as $player) {
+ if($player->uuid === $uuid) {
+ $user = $player;
+ break;
+ }
+ }
+
+ if(empty($user))
+ return view('openaudiomc')->with(['type' => 2]);
+
+ if(!isset($user->isConnected) || $user->isConnected)
return view('openaudiomc')->with(['type' => 3]);
- $link = $json->response->sessionUrl;
- header('Location: '.$link);
+ header('Location: '.$user->url);
exit;
}
- private function isJson($string) {
- if(empty($string))
- return false;
-
- json_decode($string);
- return (json_last_error() == JSON_ERROR_NONE);
- }
-
}
diff --git a/app/Http/Controllers/Panel/HomeController.php b/app/Http/Controllers/Panel/HomeController.php
index fdfbc58..78c9776 100644
--- a/app/Http/Controllers/Panel/HomeController.php
+++ b/app/Http/Controllers/Panel/HomeController.php
@@ -27,9 +27,9 @@ class HomeController extends Controller
public function index()
{
$users = User::count();
- $regions = DB::table('region')->count();
- $attractions = DB::table('attraction')->where('type', '!=', 'GLOBAL')->count();
- $shows = Show::count();
+ $regions = DB::table('regions')->count();
+ $attractions = DB::table('attractions')->count();
+ $shows = env('SHOWS', false) ? Show::count() : 0;
return view('panel.home')->with([
'users' => $users,
'regions' => $regions,
diff --git a/app/Http/Controllers/Panel/ToolController.php b/app/Http/Controllers/Panel/ToolController.php
new file mode 100644
index 0000000..71899f7
--- /dev/null
+++ b/app/Http/Controllers/Panel/ToolController.php
@@ -0,0 +1,111 @@
+middleware(['auth', 'verified', '2fa', 'admin']);
+ }
+
+ /**
+ * Show the operator tool.
+ *
+ * @return \Illuminate\Contracts\Support\Renderable
+ */
+ public function operator()
+ {
+ return view('panel.operator');
+ }
+
+ //Default values for cssTags
+ private $cssDefaults = [
+ 'banner' => 'url("../img/banner.png") center center',
+ 'bg' => '#f2f2f2',
+ 'light' => '#2ecc71',
+ 'dark' => "#27ae60",
+ 'text' => '#fff',
+ ];
+
+ //Tags that can be changed in root.css
+ private $cssTags = [
+ 'banner' => 'banner',
+ "bg" => "bg",
+ "light" => "color-light",
+ "dark" => "color-dark",
+ "text" => "color-text",
+ ];
+
+ public function css() {
+ $styles = $this->cssDefaults;
+
+ if(file_exists(storage_path('app/public/css.json'))) {
+ $json = file_get_contents(storage_path('app/public/css.json'));
+ $json = json_decode($json);
+ if(json_last_error() != JSON_ERROR_NONE && !empty($json))
+ $styles = $json;
+ }
+
+ return view('panel.css')->with([
+ 'styles' => $styles,
+ ]);
+ }
+
+ public function cssPost(Request $request) {
+ $rules = [];
+ foreach($this->cssTags as $key => $value)
+ $rules[$key] = ['required'];
+
+ $validator = Validator::make($request->all(), $rules);
+
+ if(!$validator->passes())
+ return Redirect::back()->withErrors($validator->errors());
+
+ $styles = [];
+ foreach($request->all() as $key => $value)
+ if(array_key_exists($key, $this->cssTags))
+ $styles[$key] = $value;
+
+ file_put_contents(storage_path('app/public/css.json'), json_encode($styles));
+
+ $str = ":root {\n";
+ foreach($styles as $key => $value)
+ $str .= "\t--".$this->cssTags[$key].': '.$value.";\n";
+
+ file_put_contents(public_path('assets/css/root.css'), $str.'}');
+
+ return view('panel.css')->with([
+ 'styles' => $styles,
+ ]);
+ }
+
+ public function cssReset() {
+ $styles = $this->cssDefaults;
+
+ file_put_contents(storage_path('app/public/css.json'), json_encode($styles));
+
+ $str = ":root {\n";
+ foreach($styles as $key => $value)
+ $str .= '--'.$this->cssTags[$key].': '.$value.";\n";
+
+ file_put_contents(public_path('assets/css/root.css'), $str.'}');
+
+ return Redirect::back();
+ }
+
+}
diff --git a/app/Http/Controllers/Profile/SecurityController.php b/app/Http/Controllers/Profile/SecurityController.php
index 1a1d5b7..62ff85c 100644
--- a/app/Http/Controllers/Profile/SecurityController.php
+++ b/app/Http/Controllers/Profile/SecurityController.php
@@ -35,7 +35,7 @@ class SecurityController extends Controller
$tfa = $google2fa->isActivated();
$pages = Session::where('user_id', Auth::id())->count();
$pages = (int) ceil($pages/10);
- if($page > $pages)
+ if($page < 1 || ($page > $pages && $page != 1))
return redirect()->route('security', ['page' => $pages]);
$sessions = Session::where('user_id', Auth::id())->where('id', '!=', session()->getId())->skip(($page - 1)*10)->take(($page != 1 ? 10 : 9))->orderBy('last_activity', 'desc')->get();
diff --git a/app/Http/Controllers/RidecountController.php b/app/Http/Controllers/RidecountController.php
index d14ff93..6914900 100644
--- a/app/Http/Controllers/RidecountController.php
+++ b/app/Http/Controllers/RidecountController.php
@@ -26,26 +26,57 @@ class RidecountController extends Controller
*/
public function index($attraction_id)
{
- $name = DB::table('attraction')->select('name')->where('id', '=', $attraction_id)->first()->name;
- $top10 = DB::table(DB::raw('ridecount, (SELECT @row_number:=0) AS t'))->select('uuid', DB::raw('SUM(`count`) AS `count`'), DB::raw('(@row_number:=@row_number + 1) AS `num`'))
- ->where('attractionId', '=', $attraction_id)
- ->whereRaw('YEARWEEK(date, 1) = YEARWEEK(CURDATE(), 1)')
- ->whereRaw('YEAR(date) = YEAR(CURDATE())')
- ->groupBy('uuid')
+ $attraction = DB::table('attractions')->select(['cover','name','status_id'])->where('id', '=', $attraction_id)->first();
+ if(empty($attraction))
+ return redirect()->route('status');
+
+ $type = env('TOP', 1);
+ if($type < 0 || $type > 4)
+ return redirect()->route('status');
+
+ switch ($type) {
+ case 1:
+ $filter = 'week = WEEK(CURDATE(), 1)';
+ break;
+ case 2:
+ $filter = 'month = MONTH(CURDATE())';
+ break;
+ case 3:
+ $filter = 0;
+ break;
+ case 4:
+ $filter = -1;
+ break;
+ default:
+ $filter = 'day = DAYOFYEAR(CURDATE())';
+ break;
+ }
+
+ $top10 = DB::table(DB::raw('ridecounts, (SELECT @row_number:=0) AS t'))->select('uuid', DB::raw('SUM(`count`) AS `count`'), DB::raw('(@row_number:=@row_number + 1) AS `num`'))
+ ->where('attraction_id', '=', $attraction_id);
+
+ if(!empty($filter))
+ $top10 = $top10->whereRaw($filter);
+
+ if($filter !== -1)
+ $top10 = $top10->whereRaw('year = YEAR(CURDATE())');
+
+ $top10 = $top10->groupBy('uuid')
->orderByDesc('count')
->take(10)->get()->all();
- $personal = DB::table('ridecount')
- ->where('attractionId', '=', $attraction_id)
- ->where('uuid', '=', Auth::user()->uuid)
+ $personal = DB::table('ridecounts')
+ ->where('attraction_id', '=', $attraction_id)
+ ->where('uuid', '=', Auth::user()->fixedUUID())
->sum('count');
- $total = DB::table('ridecount')
- ->where('attractionId', '=', $attraction_id)
+ $total = DB::table('ridecounts')
+ ->where('attraction_id', '=', $attraction_id)
->sum('count');
+ $attraction->status = DB::table('states')->where('id', '=', $attraction->status_id)->first();
return view('ridecount')->with([
- 'name' => $name,
+ 'attraction' => $attraction,
'top10' => $top10,
'personal' => $personal,
'total' => $total
diff --git a/app/Http/Controllers/ShowController.php b/app/Http/Controllers/ShowController.php
index ed3dfdc..82be25a 100644
--- a/app/Http/Controllers/ShowController.php
+++ b/app/Http/Controllers/ShowController.php
@@ -29,14 +29,14 @@ class ShowController extends Controller
*/
public function index()
{
- $shows = DB::select(DB::raw('SELECT t1.* FROM `shows` AS t1 RIGHT JOIN `show_dates` AS t2 ON t1.`id` = t2.`show_id` WHERE t2.`date` > CURDATE() GROUP BY t1.`id`'));
+ $shows = DB::select(DB::raw('SELECT t1.* FROM `shows` AS t1 RIGHT JOIN `show_dates` AS t2 ON t1.`id` = t2.`show_id` WHERE t2.`date` > CURRENT_TIMESTAMP() GROUP BY t1.`id`'));
return view('show')->with([
'shows' => $shows
]);
}
public function order($show_id) {
- $show = Show::join('show_dates', 'show_dates.show_id', '=', 'shows.id')->select('shows.*')->where('shows.id', '=', $show_id)->firstOrFail();
+ $show = Show::join('show_dates', 'show_dates.show_id', '=', 'shows.id')->select('shows.*')->where('shows.id', '=', $show_id)->where('show_dates.date', '>', DB::raw('CURRENT_TIMESTAMP()'))->firstOrFail();
$dates = $show->getShowDates(Auth::user()->uuid);
return view('order')->with([
diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php
index e7f326d..cafc149 100644
--- a/app/Http/Kernel.php
+++ b/app/Http/Kernel.php
@@ -19,7 +19,6 @@ class Kernel extends HttpKernel
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
- \App\Http\Middleware\HttpsProtocol::class,
];
/**
diff --git a/app/Http/Middleware/HttpsProtocol.php b/app/Http/Middleware/HttpsProtocol.php
deleted file mode 100644
index f78956c..0000000
--- a/app/Http/Middleware/HttpsProtocol.php
+++ /dev/null
@@ -1,17 +0,0 @@
-secure() && in_array(App::environment(), ['stage', 'production']))
- return redirect()->secure($request->getRequestUri());
-
- return $next($request);
- }
-}
diff --git a/app/Status.php b/app/Status.php
index a64b73a..ce42bdf 100644
--- a/app/Status.php
+++ b/app/Status.php
@@ -10,9 +10,9 @@ class Status {
if(self::$data !== null)
return self::$data;
- $regions = DB::table('region')->get()->all();
- $attractions = DB::table('attraction')->select(['id', 'name', 'status', 'region_id'])->where('status', '!=', 'GLOBAL')->get()->all();
- $statuses = DB::table('status')->get()->all(); //TODO
+ $regions = DB::table('regions')->get()->all();
+ $attractions = DB::table('attractions')->get()->all();
+ $statuses = DB::table('states')->get()->all();
$data = [];
foreach($regions as $region) {
@@ -22,11 +22,14 @@ class Status {
$status = [];
foreach ($statuses as $stat)
- $status[$stat->statusId] = $stat->statusName;
+ $status[$stat->id] = (object) [
+ "name" => $stat->name,
+ "color" => $stat->color,
+ ];
foreach ($attractions as $attraction) {
$region_id = $attraction->region_id;
- $attraction->status = $status[$attraction->status];
+ $attraction->status = $status[$attraction->status_id];
if(array_key_exists($region_id, $data))
array_push($data[$region_id]->attractions, $attraction);
}
diff --git a/config/broadcasting.php b/config/broadcasting.php
index 3bba110..32ee584 100644
--- a/config/broadcasting.php
+++ b/config/broadcasting.php
@@ -15,7 +15,7 @@ return [
|
*/
- 'default' => env('BROADCAST_DRIVER', 'null'),
+ 'default' => env('BROADCAST_DRIVER', 'log'),
/*
|--------------------------------------------------------------------------
diff --git a/public/assets/control.js b/public/assets/control.js
deleted file mode 100644
index 22cb7f8..0000000
--- a/public/assets/control.js
+++ /dev/null
@@ -1,212 +0,0 @@
-function getPacket(channel, type, payload) {
- let packet = {
- channel: channel,
- data: {
- type: type,
- payload: payload
- }
- }
-
- return JSON.stringify(packet)
-}
-
-function getClickPacket(uuid, item_id) {
- return getPacket(
- 'SERVER_IN_OPERATOR_CLICK',
- 'nl.iobyte.parkplus.api.packet.payloads.operator.ClientOperatorClickPayload',
- {
- uuid: uuid,
- item_id: item_id
- }
- )
-}
-
-$(document).on('click', "div.panel[id^='button-'] > div.panel-body > img", function() {
- const parent = $(this).parent().parent();
- const id = parent.attr("id").replace("button-", "");
-
- if(!socket || hasConnected !== true)
- return
-
- socket.emit(
- 'data',
- getClickPacket(
- fixUUID(window.settings.uuid),
- id
- )
- );
-});
-
-window.sendMessage = function(message) {
- if(hasConnected)
- socket.send(message);
-}
-
-let hasConnected = false
-let socket = null
-$(() => {
- socket = io('websocket.iobyte.nl', {
- query: "type=client&id=" + window.settings.id + "&uuid=" + fixUUID(window.settings.uuid) + "&attraction=" + window.settings.attraction + "&token=" + window.settings.pin,
- autoConnect: false,
- withCredentials: false
- })
-
- socket.on('connect', () => {
- setTimeout(() => {
- if(hasConnected)
- return
-
- socket.close()
- }, 5 * 1000)
- })
-
- socket.on('disconnect', () => {
- const control = $("span#control");
- control.removeClass();
- control.addClass("control-status");
- control.addClass("status-closed");
- control.html("Lost Connection");
- setTimeout(() => {
- if(hasConnected)
- return
-
- socket.close()
- }, 5 * 1000)
- })
-
- socket.on('error', e => {
- socket.close()
- console.log(e)
- })
-
- socket.on('close', () => {
- hasConnected = true
- const control = $("span#control");
- control.removeClass();
- control.addClass("control-status");
- control.addClass("status-closed");
- control.html("Disconnected");
- })
-
- socket.on('data', payload => {
- try {
- payload = JSON.parse(payload)
- } catch (e) {
- return
- }
-
- if(!payload)
- return
-
- if(!payload.hasOwnProperty('channel'))
- return
-
- let channel = payload.channel;
- if(channel === 'CLIENT_KICK') {
- socket.close()
- return
- }
-
- let data;
- if(payload.hasOwnProperty('data')) {
- data = payload.data.payload;
- } else {
- data = payload.data
- }
-
- handlePacket(channel, data)
- })
-})
-
-function fixUUID(i) {
- return i.substr(0,8) +
- "-" +
- i.substr(8,4) +
- "-" +
- i.substr(12,4) +
- "-" +
- i.substr(16,4) +
- "-" +
- i.substr(20)
-}
-
-function handlePacket(channel, payload) {
- switch (channel) {
- case 'CLIENT_NOTIFICATION':
- handleNotification(payload.title, payload.message)
- break
- case 'CLIENT_OPERATOR_REQUEST_REPLY':
- handleReply(payload)
- break
- case 'CLIENT_ATTRACTION_STATE':
- handleStatus(payload.status)
- break
- case 'CLIENT_OPERATOR_STATE':
- handleState(payload.item_id, payload.state)
- break
- }
-}
-
-function handleNotification(title, message) {
- const msg = $("div#message");
- msg.html('
'+title+'
');
- console.log({
- title: title,
- message: message,
- })
-}
-
-function handleReply(payload) {
- if(payload.hasOwnProperty('requestReply') && payload.requestReply === 'ACCEPT') {
- const control = $("span#control");
- control.removeClass();
- control.addClass("control-status");
- control.addClass("status-open");
- control.html("Connected");
-
- loadPanel(payload.data)
- return
- }
-
- socket.close();
- handleNotification(
- 'Unable to operate ride',
- payload.message
- )
-}
-
-function jsUcfirst(str) {
- return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
-}
-
-function handleStatus(payload) {
- const status = $("span#status");
- status.html(jsUcfirst(payload.name));
- status.style.backgroundColor = payload.hex
-}
-
-function handleState(id, state) {
- let img = new Image();
- img.onload = () => {
- $("div#button-"+id+" div.panel-body img").attr("src", state.cover);
- $("div#button-"+id+" div.panel-body #text").html(state.name);
- }
- img.src = state.cover;
-}
-
-function loadPanel(panel) {
- for(let i = 0; i < panel.items.length; i++) {
- let item = panel.items[i];
- let state = item.state
-
- const image = state.cover;
- const title = item.name;
- const id = item.id;
- const text = state.name;
-
- if(i === 0)
- $("div#panel").append('\n');
-
- $("div#panel").append("\n");
- }
-}
diff --git a/public/assets/css/panel.min.css b/public/assets/css/panel.min.css
deleted file mode 100644
index b8569ce..0000000
--- a/public/assets/css/panel.min.css
+++ /dev/null
@@ -1,55 +0,0 @@
-body,html{width:100%;min-height:100%;margin:0;padding:0;position:absolute;background-color:#2980b9;background: url("https://cdn.discordapp.com/attachments/706149937905270904/707677922462400532/Gradiant_5.png") no-repeat center center fixed;-webkit-background-size: cover;-moz-background-size: cover;-o-background-size: cover;background-size: cover;font-family:sans-serif}.page{width:360px;padding:8% 0 0;margin:auto}.page > div,.page > form{position:relative;z-index:1;background:#171717;color:#fff;max-width:360px;margin:0 auto 100px;padding:15px 45px 15px 45px;box-shadow:0 0 20px 0 rgba(0,0,0,.2),0 5px 5px 0 rgba(0,0,0,.24);border-radius:3px}.page > div img,.page form img{width:80%;display:block;margin:auto;margin-bottom:15px!important}.page form .input-group{margin-bottom:10px}.alert{color:#fff!important;margin-bottom:5px}.alert-danger{background-color:#e74c3c!important;border:none!important}.alert-success{background-color:#2ecc71!important;border:none!important}
-
-.btn-custom {
- outline: 0;
- background: #e31c26;
- width: 180px;
- border: 0;
- padding: 5px;
- color: #FFFFFF;
- font-size: 17px;
- cursor: pointer;
- border-radius: 3px;
-}
-
-.input-group-addon {
- background-color: #e31c26 !important;
- border-color: #333 !important;
- color: #fff;
-}
-
-.form-control,
-.form-control[disabled] {
- background-color: #404040;
- color: #fff;
- border-color: #262626 !important;
-}
-
-.btn-custom:hover,.btn-custom:active,.btn-custom:focus {
- background: #cc1922;
- color: #fff;
-}
-
-.footer {
- margin-bottom: 0;
- background-color: #171717;
- position: absolute;
- bottom: 0;
- text-align: center;
- padding: 10px;
- width: 100%;
- text-decoration: none;
- color: #fff;
-}
-
-.footer img {
- filter: brightness(0) invert(1);
-}
-
-a {
- color: #888;
-}
-
-a:hover, a:focus {
- color: #ccc;
-}
diff --git a/public/assets/css/panel_default.min.css b/public/assets/css/panel_default.min.css
deleted file mode 100644
index 693cbc9..0000000
--- a/public/assets/css/panel_default.min.css
+++ /dev/null
@@ -1,29 +0,0 @@
-body,html{width:100%;min-height:100%;margin:0;padding:0;position:absolute;background-color:#2980b9;background: url("../img/background.jpg") no-repeat center center fixed;-webkit-background-size: cover;-moz-background-size: cover;-o-background-size: cover;background-size: cover;font-family:sans-serif}.page{width:360px;padding:8% 0 0;margin:auto}.page > div,.page > form{position:relative;z-index:1;background:#fff;max-width:360px;margin:0 auto 100px;padding:15px 45px 15px 45px;box-shadow:0 0 20px 0 rgba(0,0,0,.2),0 5px 5px 0 rgba(0,0,0,.24);border-radius:3px}.page > div img,.page form img{width:80%;display:block;margin:auto;margin-bottom:15px!important}.page form .input-group{margin-bottom:10px}.alert{color:#fff!important;margin-bottom:5px}.alert-danger{background-color:#e74c3c!important;border:none!important}.alert-success{background-color:#2ecc71!important;border:none!important}
-
-.btn-custom {
- outline: 0;
- background: #2ecc71;
- width: 180px;
- border: 0;
- padding: 5px;
- color: #FFFFFF;
- font-size: 17px;
- cursor: pointer;
- border-radius: 3px;
-}
-
-.btn-custom:hover,.btn-custom:active,.btn-custom:focus {
- background: #27ae60;
- color: #fff;
-}
-
-.footer {
- margin-bottom: 0;
- background-color: #fff;
- position: absolute;
- bottom: 0;
- text-align: center;
- padding: 10px;
- width: 100%;
- text-decoration: none;
-}
diff --git a/public/assets/css/root.css b/public/assets/css/root.css
new file mode 100644
index 0000000..ad40eaf
--- /dev/null
+++ b/public/assets/css/root.css
@@ -0,0 +1,7 @@
+:root {
+--banner: url("../img/banner.png") center center;
+--bg: #f2f2f2;
+--color-light: #2ecc71;
+--color-dark: #27ae60;
+--color-text: #fff;
+}
\ No newline at end of file
diff --git a/public/assets/css/skin.css b/public/assets/css/skin.css
index d711e53..f456f32 100644
--- a/public/assets/css/skin.css
+++ b/public/assets/css/skin.css
@@ -1,10 +1,12 @@
+@import "root.css";
+
.user-image, .user-header img {
border: 0 !important;
border-radius: 0 !important;
}
.navbar-nav>.user-menu>.dropdown-menu>li.user-header>p {
- color: #fff !important;
+ color: var(--color-text) !important;
font-weight: 600;
}
@@ -13,7 +15,7 @@
}
.bg-green {
- background-color: #cc1922 !important;
+ background-color: var(--color-light) !important;
}
.small-box .inner {
@@ -21,7 +23,7 @@
}
.small-box .icon {
- color: #fff !important;
+ color: var(--color-text) !important;
font-size: 65px;
margin-top: 10px;
}
@@ -40,7 +42,7 @@
}
.main-header .navbar {
- background-color: #cc1922;
+ background-color: var(--color-light);
}
.main-header .navbar .nav > li > a {
@@ -54,53 +56,53 @@
.main-header .navbar .nav .open > a:hover,
.main-header .navbar .nav .open > a:focus,
.main-header .navbar .nav > .active > a {
- background: #e31c26;
- color: #fff;
+ background: var(--color-dark);
+ color: var(--color-text);
}
.main-header .navbar .sidebar-toggle {
- color: #fff;
+ color: var(--color-text);
}
.main-header .navbar .sidebar-toggle:hover {
color: #f6f6f6;
- background: #e31c26;
+ background: var(--color-dark);
}
.main-header .navbar .sidebar-toggle {
- color: #fff;
+ color: var(--color-text);
}
.main-header .navbar .sidebar-toggle:hover {
- background-color: #e31c26;
+ background-color: var(--color-dark);
}
@media (max-width: 767px) {
.main-header .navbar .dropdown-menu li.divider {
- background-color: #e31c26;
+ background-color: var(--color-dark);
}
.main-header .navbar .dropdown-menu li a {
- color: #fff;
+ color: var(--color-text);
}
.main-header .navbar .dropdown-menu li a:hover {
- background: #e31c26;
+ background: var(--color-dark);
}
}
.main-header .logo {
- background-color: #e31c26;
+ background-color: var(--color-dark);
color: #ffffff;
border-bottom: 0 solid transparent;
}
.main-header .logo:hover {
- background-color: #e31c26;
+ background-color: var(--color-dark);
}
.main-header li.user-header {
- background-color: #cc1922;
+ background-color: var(--color-light);
}
.content-header {
@@ -110,7 +112,7 @@
.wrapper,
.main-sidebar,
.left-side {
- background-color: #333;
+ background-color: #222d32;
}
.user-panel > .info,
@@ -119,8 +121,8 @@
}
.sidebar-menu > li.header {
- color: #fff;
- background: #1a1a1a;
+ color: #4b646f;
+ background: #1a2226;
}
.sidebar-menu > li > a {
@@ -131,20 +133,20 @@
.sidebar-menu > li.active > a,
.sidebar-menu > li.menu-open > a {
color: #ffffff;
- background: #262626;
+ background: #1e282c;
}
.sidebar-menu > li.active > a {
- border-left-color: #e31c26;
+ border-left-color: var(--color-light);
}
.sidebar-menu > li > .treeview-menu {
margin: 0 1px;
- background: #1a1919;
+ background: #2c3b41;
}
.sidebar a {
- color: #999;
+ color: #b8c7ce;
}
.sidebar a:hover {
@@ -152,10 +154,11 @@
}
.sidebar-menu .treeview-menu > li > a {
- color: #ccc;
+ color: #8aa4af;
}
.sidebar-menu .treeview-menu > li.active > a,
+
.sidebar-menu .treeview-menu > li > a:hover {
color: #fff;
}
@@ -176,10 +179,7 @@
.sidebar-form input[type="text"] {
color: #666;
- border-top-left-radius: 2px;
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 2px;
+ border-radius: 2px 0 0 2px;
}
.sidebar-form input[type="text"]:focus,
@@ -194,7 +194,10 @@
.sidebar-form .btn {
color: #999;
- border-radius: 0 2px 2px 0;
+ border-top-left-radius: 0;
+ border-top-right-radius: 2px;
+ border-bottom-right-radius: 2px;
+ border-bottom-left-radius: 0;
}
.form-control {
@@ -210,19 +213,19 @@ p {
}
.box.box-primary {
- border-top-color: #cc1922 !important;
+ border-top-color: var(--color-light) !important;
}
.btn.btn-primary {
- border-color: #e31c26 !important;
- background-color: #cc1922 !important;
- color: #fff !important;
+ border-color: var(--color-dark) !important;
+ background-color: var(--color-light) !important;
+ color: var(--color-text) !important;
}
.btn.btn-primary:hover {
- border-color: #cc1922 !important;
- background-color: #e31c26 !important;
- color: #fff !important;
+ border-color: var(--color-light) !important;
+ background-color: var(--color-dark) !important;
+ color: var(--color-text) !important;
}
.logo-mini img {
@@ -283,7 +286,7 @@ input.form-control {
}
.bg-green-gradient {
- background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #e31c26), color-stop(1, #cc1922)) !important;
+ background: -webkit-gradient(linear, left bottom, left top, color-stop(0, var(--color-dark)), color-stop(1, var(--color-light))) !important;
}
i.no {
@@ -293,32 +296,32 @@ i.no {
}
i.yes {
- color: #cc1922;
+ color: #2ecc71;
font-weight: 900;
font-size: 25px;
}
.pagination li.active a {
- background-color: #cc1922;
+ background-color: var(--color-light);
border-color: transparent;
}
.panel-theme {
- border-color: #e31c26;
+ border-color: var(--color-dark);
}
.panel-theme>.panel-heading {
- color: #fff !important;
- background-color: #cc1922 !important;
- border-color: #e31c26 !important;
+ color: var(--color-text) !important;
+ background-color: var(--color-light) !important;
+ border-color: var(--color-dark) !important;
}
.panel-theme>.panel-heading+.panel-collapse>.panel-body {
- border-top-color: #e31c26 !important;
+ border-top-color: var(--color-dark) !important;
}
.panel-theme>.panel-footer+.panel-collapse>.panel-body {
- border-bottom-color: #e31c26 !important;
+ border-bottom-color: var(--color-dark) !important;
}
.sceditor-container, textarea.editor {
@@ -329,210 +332,95 @@ i.yes {
border-radius: 3px 3px 0 0;
}
-.content-wrapper {
- background-color: #171717;
-}
-
-.content-header {
- color: #fff;
-}
-
-.content-header>.breadcrumb>li:not(.active)>a {
- color: #fff;
-}
-
-.content-header>.breadcrumb>.active {
- color: #ccc;
-}
-
-.main-footer {
- background-color: #282727;
- color: #fff;
- border: 0;
-}
-
-.main-footer img {
- filter: brightness(0) invert(1);
-}
-
-.box {
- border-top-color: #e31c26;
- background-color: #282727;
-}
-
-.box .box-header {
- color: #fff;
-}
-
-.sceditor-container, textarea.editor {
- resize: vertical !important;
+.settings {
width: 100%;
- max-width: 100%;
- min-height: 200px;
- border-color: #262626 !important;
- color: #fff !important;
- background-color: #404040 !important;
+ display: block;
+ height: 30px;
}
-.sceditor-toolbar{
- color: #fff !important;
- background-color: #262626 !important;
+.settings:not(:first-child) {
+ margin-top: 10px;
}
-.sceditor-dropdown label {
- color: #fff !important;
+.settings > .settings-toggle {
+ width: 37px;
+ margin-right: 5px;
+ display: inline-block;
+ float: left;
}
-.sceditor-dropdown {
- color: #fff !important;
- background-color: #333 !important;
- border-color: #262626 !important;
+.settings > .settings-text {
+ width: calc(100% - 65px);
+ height: 30px;
+ display: inline-block;
+ float: left;
}
-.sceditor-dropdown textarea,
-.sceditor-dropdown input {
- background-color: #404040 !important;
- border-color: #262626 !important;
- margin: 0 !important;
+.settings-text > p > .settings-info {
+ font-size: 15px;
}
-.sceditor-dropdown div input[type="button"] {
- background-color: #404040 !important;
- color: #fff !important;
- border-color: #202326;
- width: calc(100% - 10px);
+.settings-text > p {
+ margin-top: -2px;
+ font-size: 20px;
}
-.sceditor-dropdown div input[type="button"]:hover {
- background-color: #202326 !important;
- color: #fff !important;
- border-color: #333 !important;
+.box.box-success {
+ border-top-color: var(--color-light);
}
-.sceditor-dropdown a.sceditor-fontsize-option {
- color: #fff !important;
+/* Switcher */
+.switcher, .switcher * {
+ box-sizing: border-box;
+ margin: 0;
+ padding: 0;
}
-.sceditor-dropdown a.sceditor-fontsize-option:hover {
- color: #fff !important;
- background-color: #404040 !important;
+.switcher {
+ position: relative;
+ display: block;
+ width: 37px;
+ height: 22px;
}
-.sceditor-toolbar .sceditor-group {
- color: #fff !important;
- background-color: #ccc !important;
- border: 0 !important;
+.switcher > input {
+ opacity: 0;
+ width: 0;
+ height: 0;
}
-.sceditor-container iframe {
- color: #fff !important;
- background-color: #404040 !important;
+.switcher > .switcher-slider {
+ position: absolute;
+ cursor: pointer;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background-color: #FF5B5B;
+ -webkit-transition: 0.3s;
+ transition: 0.3s;
+ border-radius: 20px;
}
-.sceditor-font-picker div {
- overflow-y: scroll !important;
- height: 120px !important;
+.switcher > .switcher-slider:before {
+ position: absolute;
+ content: "";
+ height: 18px;
+ width: 18px;
+ left: 2px;
+ bottom: 2px;
+ background-color: #fff;
+ -webkit-transition: 0.3s;
+ transition: 0.3s;
+ border-radius: 20px;
}
-.sceditor-font-option,
-.sceditor-more {
- color: #fff !important;
+.switcher > input:checked + .switcher-slider {
+ background-color: #57E659;
}
-.sceditor-font-option:hover,
-.sceditor-more:hover {
- background-color: #404040 !important;
-}
-
-.table-bordered {
- border-color: #262626 !important;
- color: #fff !important;
-}
-
-.table-bordered > thead > tr > th {
- border-color: #e31c26;
- background-color: #e31c26;
-}
-
-.table-striped > tbody > tr > td {
- background-color: #262626;
- border-color: #666 !important;
-}
-
-.table-bordered > tbody >tr > td:first-child {
- border-left-color: #262626 !important;
-}
-
-.table-bordered > tbody >tr:last-child > td {
- border-bottom-color: #262626 !important;
-}
-
-
-.table-bordered > tbody >tr > td:last-child {
- border-right-color: #262626 !important;
-}
-
-.table-striped>tbody>tr:nth-of-type(odd) > td {
- background-color: #404040;
-}
-
-.pagination > li:first-child > a,
-.pagination > li:last-child > a {
- background-color: #e31c26 !important;
- border-color: #262626 !important;
-}
-
-.pagination > .disabled > a {
- color: #ccc !important;
-}
-
-.pagination li a {
- background-color: #404040;
- color: #fff;
- border-color: #202326 !important;
-}
-
-.pagination li:hover a {
- background-color: #666;
- color: #fff;
-}
-
-.pagination li.active a,
-.pagination li.active a:hover{
- background-color: #666;
- color: #fff;
-}
-
-.input-group-addon {
- background-color: #e31c26 !important;
- border-color: #333 !important;
- color: #fff;
-}
-
-.form-control,
-.form-control[disabled] {
- background-color: #404040;
- color: #fff;
- border-color: #262626 !important;
-}
-
-.form-group > label {
- color: #fff;
-}
-
-.navbar-nav>.user-menu>.dropdown-menu>li.user-header>p {
- color: #fff !important;
-}
-
-.navbar-nav>.user-menu>.dropdown-menu {
- border: 2px solid #e6e6e6;
-}
-
-.navbar-nav>.user-menu>.dropdown-menu {
- border: 0 !important;
- top: 55px
-}
-
-.navbar-nav>.user-menu>.dropdown-menu>.user-footer {
- background-color: #282727;
+.switcher > input:checked + .switcher-slider:before {
+ -webkit-transform: translateX(15px);
+ -ms-transform: translateX(15px);
+ transform: translateX(15px);
}
diff --git a/public/assets/css/skin_default.css b/public/assets/css/skin_default.css
deleted file mode 100644
index a73bf0a..0000000
--- a/public/assets/css/skin_default.css
+++ /dev/null
@@ -1,334 +0,0 @@
-.user-image, .user-header img {
- border: 0 !important;
- border-radius: 0 !important;
-}
-
-.navbar-nav>.user-menu>.dropdown-menu>li.user-header>p {
- color: #fff !important;
- font-weight: 600;
-}
-
-.logo-lg img, .logo-mini img {
- filter: brightness(0) invert(1);
-}
-
-.bg-green {
- background-color: #2ecc71 !important;
-}
-
-.small-box .inner {
- min-height: 102px;
-}
-
-.small-box .icon {
- color: #fff !important;
- font-size: 65px;
- margin-top: 10px;
-}
-
-.label.label-status {
- line-height: unset !important;
- font-size: 15px !important;
-}
-
-.main-footer span {
- font-weight: 600;
-}
-
-.main-footer span a img {
- height: 20px !important;
-}
-
-.main-header .navbar {
- background-color: #2ecc71;
-}
-
-.main-header .navbar .nav > li > a {
- color: #ffffff;
-}
-
-.main-header .navbar .nav > li > a:hover,
-.main-header .navbar .nav > li > a:active,
-.main-header .navbar .nav > li > a:focus,
-.main-header .navbar .nav .open > a,
-.main-header .navbar .nav .open > a:hover,
-.main-header .navbar .nav .open > a:focus,
-.main-header .navbar .nav > .active > a {
- background: #27ae60;
- color: #fff;
-}
-
-.main-header .navbar .sidebar-toggle {
- color: #fff;
-}
-
-.main-header .navbar .sidebar-toggle:hover {
- color: #f6f6f6;
- background: #27ae60;
-}
-
-.main-header .navbar .sidebar-toggle {
- color: #fff;
-}
-
-.main-header .navbar .sidebar-toggle:hover {
- background-color: #27ae60;
-}
-
-@media (max-width: 767px) {
- .main-header .navbar .dropdown-menu li.divider {
- background-color: #27ae60;
- }
-
- .main-header .navbar .dropdown-menu li a {
- color: #fff;
- }
-
- .main-header .navbar .dropdown-menu li a:hover {
- background: #27ae60;
- }
-}
-
-.main-header .logo {
- background-color: #27ae60;
- color: #ffffff;
- border-bottom: 0 solid transparent;
-}
-
-.main-header .logo:hover {
- background-color: #27ae60;
-}
-
-.main-header li.user-header {
- background-color: #2ecc71;
-}
-
-.content-header {
- background: transparent;
-}
-
-.wrapper,
-.main-sidebar,
-.left-side {
- background-color: #222d32;
-}
-
-.user-panel > .info,
-.user-panel > .info > a {
- color: #fff;
-}
-
-.sidebar-menu > li.header {
- color: #4b646f;
- background: #1a2226;
-}
-
-.sidebar-menu > li > a {
- border-left: 3px solid transparent;
-}
-
-.sidebar-menu > li:hover > a,
-.sidebar-menu > li.active > a,
-.sidebar-menu > li.menu-open > a {
- color: #ffffff;
- background: #1e282c;
-}
-
-.sidebar-menu > li.active > a {
- border-left-color: #2ecc71;
-}
-
-.sidebar-menu > li > .treeview-menu {
- margin: 0 1px;
- background: #2c3b41;
-}
-
-.sidebar a {
- color: #b8c7ce;
-}
-
-.sidebar a:hover {
- text-decoration: none;
-}
-
-.sidebar-menu .treeview-menu > li > a {
- color: #8aa4af;
-}
-
-.sidebar-menu .treeview-menu > li.active > a,
-
-.sidebar-menu .treeview-menu > li > a:hover {
- color: #fff;
-}
-
-.sidebar-form {
- border-radius: 3px;
- border: 1px solid #374850;
- margin: 10px 10px;
-}
-
-.sidebar-form input[type="text"],
-.sidebar-form .btn {
- box-shadow: none;
- background-color: #374850;
- border: 1px solid transparent;
- height: 35px;
-}
-
-.sidebar-form input[type="text"] {
- color: #666;
- border-top-left-radius: 2px;
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 2px;
-}
-
-.sidebar-form input[type="text"]:focus,
-.sidebar-form input[type="text"]:focus + .input-group-btn .btn {
- background-color: #fff;
- color: #666;
-}
-
-.sidebar-form input[type="text"]:focus + .input-group-btn .btn {
- border-left-color: #fff;
-}
-
-.sidebar-form .btn {
- color: #999;
- border-top-left-radius: 0;
- border-top-right-radius: 2px;
- border-bottom-right-radius: 2px;
- border-bottom-left-radius: 0;
-}
-
-.form-control {
- margin-bottom: 5px;
-}
-
-.input-group {
- margin-bottom: 15px;
-}
-
-p {
- word-break: break-word;
-}
-
-.box.box-primary {
- border-top-color: #2ecc71 !important;
-}
-
-.btn.btn-primary {
- border-color: #27ae60 !important;
- background-color: #2ecc71 !important;
- color: #fff !important;
-}
-
-.btn.btn-primary:hover {
- border-color: #2ecc71 !important;
- background-color: #27ae60 !important;
- color: #fff !important;
-}
-
-.logo-mini img {
- display: block;
- width: 40px;
- margin-left: 5px;
- margin-top: 10px;
-}
-
-.logo-lg img {
- display: block;
- height: 30px;
- margin: auto;
- margin-top: 10px !important;
-}
-
-.help-block {
- font-size: 12px;
- margin-top: -12px;
- margin-bottom: -5px;
-}
-
-div.pull-left.image {
- margin-top: 5px;
-}
-
-th.ip, td.ip {
- width: 335px;
-}
-
-.role, .project-status {
- font-weight: 700;
- padding: 5px;
- border-radius: 3px;
- color: #fff;
- background-color: transparent;
- display: inline-block;
- width: fit-content;
-}
-
-div.btn-group, div.btn-group .multiselect {
- width: 100% !important;
- margin-top: -2px;
-}
-
-div.form-group {
- margin-top: -10px;
-}
-
-input.form-control {
- border-top-right-radius: 3px !important;
- border-bottom-right-radius: 3px !important;
-}
-
-.input-group .input-group-addon {
- border-top-left-radius: 3px !important;
- border-bottom-left-radius: 3px !important;
-}
-
-.bg-green-gradient {
- background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #27ae60), color-stop(1, #2ecc71)) !important;
-}
-
-i.no {
- color: #e74c3c;
- font-weight: 900;
- font-size: 25px;
-}
-
-i.yes {
- color: #2ecc71;
- font-weight: 900;
- font-size: 25px;
-}
-
-.pagination li.active a {
- background-color: #2ecc71;
- border-color: transparent;
-}
-
-.panel-theme {
- border-color: #27ae60;
-}
-
-.panel-theme>.panel-heading {
- color: #fff !important;
- background-color: #2ecc71 !important;
- border-color: #27ae60 !important;
-}
-
-.panel-theme>.panel-heading+.panel-collapse>.panel-body {
- border-top-color: #27ae60 !important;
-}
-
-.panel-theme>.panel-footer+.panel-collapse>.panel-body {
- border-bottom-color: #27ae60 !important;
-}
-
-.sceditor-container, textarea.editor {
- resize: vertical !important;
- width: 100%;
- max-width: 100%;
- min-height: 200px;
- border-radius: 3px 3px 0 0;
-}
diff --git a/public/assets/css/style.css b/public/assets/css/style.css
index 3aa2d71..e6bf523 100644
--- a/public/assets/css/style.css
+++ b/public/assets/css/style.css
@@ -1,10 +1,11 @@
+@import "root.css";
+
html, body {
width: 100%;
min-height: 100%;
margin: 0;
padding: 0;
- position: absolute;
- background: url("https://cdn.discordapp.com/attachments/706149937905270904/707677922462400532/Gradiant_5.png") no-repeat center center fixed;
+ background: var(--bg) no-repeat center center fixed;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
@@ -12,6 +13,36 @@ html, body {
font-family: sans-serif;
}
+.page {
+ width: 360px;
+ padding: 8% 0 0;
+ margin: auto
+}
+
+.page>div,
+.page>form {
+ position: relative;
+ z-index: 1;
+ background: var(--color-text);
+ max-width: 360px;
+ margin: 0 auto 100px;
+ padding: 15px 45px 15px 45px;
+ box-shadow: 0 0 20px 0 rgba(0, 0, 0, .2), 0 5px 5px 0 rgba(0, 0, 0, .24);
+ border-radius: 3px
+}
+
+.page>div img,
+.page form img {
+ width: 80%;
+ display: block;
+ margin: auto;
+ margin-bottom: 15px!important
+}
+
+.page form .input-group {
+ margin-bottom: 10px
+}
+
.login-page {
width: 360px;
padding: 8% 0 0;
@@ -47,19 +78,18 @@ html, body {
.login-page form button {
outline: 0;
- background: #e31c26;
- width: 180px;
+ background: var(--color-light);
+ width: 100%;
border: 0;
- padding: 5px;
- color: #FFFFFF;
- font-size: 17px;
+ padding: 15px;
+ color: var(--color-text);
+ font-size: 20px;
cursor: pointer;
border-radius: 3px;
}
.login-page form button:hover,.form button:active,.form button:focus {
- background: #cc1922;
- color: #fff;
+ background: var(--color-dark);
}
.login-page form .message {
@@ -69,12 +99,12 @@ html, body {
}
.login-page form .message a {
- color: #27ae60;
+ color: var(--color-dark);
text-decoration: none;
}
.login-page form .message a:hover {
- color: #2ecc71;
+ color: var(--color-light);
}
.login-page form .register-form {
@@ -86,17 +116,47 @@ html, body {
background: transparent !important;
}
+.banner {
+ width: 100%;
+ background: var(--banner) no-repeat;
+ -webkit-background-size: cover;
+ -moz-background-size: cover;
+ -o-background-size: cover;
+ background-size: cover;
+ overflow: hidden;
+ position: relative;
+ height: 150px;
+}
+
+.banner:after {
+ content: '\A';
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+ background: rgba(0,0,0,0.3);
+}
+
+.banner > div {
+ position: absolute;
+ padding: 45px;
+ text-align: center;
+ width: 100%;
+ height: 100%;
+ z-index: 1;
+ inset: 0;
+}
+
.wrapper {
padding: 15px;
width: 100% !important;
- margin-top: 75px !important;
margin-bottom: 40px !important;
}
.footer {
margin-bottom: 0;
- background-color: #282727;
- color: #fff;
+ background-color: #fff;
position: absolute;
bottom: 0;
text-align: center;
@@ -111,12 +171,11 @@ html, body {
.footer span a img {
height: 20px !important;
- filter: brightness(0) invert(1);
}
.alert {
- color: #fff !important;
+ color: var(--color-text); !important;
}
.alert-success {
@@ -130,91 +189,94 @@ html, body {
}
.panel-theme {
- border-color: #cc1922;
+ border-color: var(--color-dark);
+ border-radius: 5px;
+ overflow: hidden;
}
.panel-theme>.panel-heading {
- color: #fff !important;
- background-color: #e31c26 !important;
- border-color: #cc1922 !important;
+ color: var(--color-text); !important;
+ background-color: var(--color-light) !important;
+ border-color: var(--color-dark) !important;
}
.panel-theme>.panel-heading+.panel-collapse>.panel-body {
- border-top-color: #cc1922 !important;
+ border-top-color: var(--color-dark) !important;
}
.panel-theme>.panel-footer+.panel-collapse>.panel-body {
- border-bottom-color: #cc1922 !important;
+ border-bottom-color: var(--color-dark) !important;
}
.navbar.navbar-theme {
- background-color: #e31c26;
+ background-color: var(--color-light);
border-color: transparent;
+ margin-bottom: 5px;
}
.navbar.navbar-theme .navbar-brand {
- color: #fff;
+ color: var(--color-text);
}
.navbar.navbar-theme .navbar-brand:hover,
.navbar.navbar-theme .navbar-brand:focus {
- color: #fff;
+ color: var(--color-text);
}
.navbar.navbar-theme .navbar-nav > li > a {
- color: #fff;
+ color: var(--color-text);
background-color: transparent;
}
.navbar.navbar-theme .navbar-nav > li > a:hover,
.navbar.navbar-theme .navbar-nav > li > a:focus {
- color: #fff;
- background-color: #cc1922;
+ color: var(--color-text);
+ background-color: var(--color-dark);
}
.navbar.navbar-theme .navbar-nav > .active > a,
.navbar.navbar-theme .navbar-nav > .active > a:hover,
.navbar.navbar-theme .navbar-nav > .active > a:focus {
- color: #fff;
- background-color: #cc1922;
+ color: var(--color-text);
+ background-color: var(--color-dark);
}
.navbar.navbar-theme .navbar-nav > .open > a,
.navbar.navbar-theme .navbar-nav > .open > a:hover,
.navbar.navbar-theme .navbar-nav > .open > a:focus {
- color: #fff;
- background-color: #cc1922;
+ color: var(--color-text);
+ background-color: var(--color-dark);
}
.navbar.navbar-theme .navbar-toggle {
- border-color: #fff;
- color: #e31c26;
+ border-color: var(--color-text);
+ color: var(--color-light);
}
.navbar.navbar-theme .navbar-toggle:hover,
.navbar.navbar-theme .navbar-toggle:focus {
- border-color: #fff;
- color: #cc1922;
+ border-color: var(--color-text);
+ color: var(--color-dark);
}
.navbar.navbar-theme .navbar-toggle .icon-bar {
- background-color: #fff;
- color: #cc1922;
+ background-color: var(--color-text);
+ color: var(--color-dark);
}
.navbar.navbar-theme .navbar-link {
- color: #fff;
- background-color: #cc1922;
+ color: var(--color-text);
+ background-color: var(--color-dark);
}
.navbar.navbar-theme .navbar-link:hover {
- color: #fff;
- background-color: #cc1922;
+ color: var(--color-text);
+ background-color: var(--color-dark);
}
.navbar.navbar-theme .dropdown-menu {
- background-color: #e31c26;
- border-color: #cc1922;
+ background-color: var(--color-light);
+ border-color: var(--color-dark);
margin: 0 !important;
padding: 0 !important;
}
@@ -225,22 +287,22 @@ html, body {
}
.navbar.navbar-theme .dropdown-menu a {
- color: #fff;
+ color: var(--color-text);
padding: 7px !important;
}
.navbar.navbar-theme .dropdown-menu a:focus,
.navbar.navbar-theme .dropdown-menu a:hover {
- color: #fff;
- background-color: #cc1922;
+ color: var(--color-text);
+ background-color: var(--color-dark);
}
.dropdown-menu .divider {
- background-color: #cc1922 !important;
+ background-color: var(--color-dark) !important;
}
.dropdown-menu .active a {
- background-color: #cc1922 !important;
+ background-color: var(--color-dark) !important;
}
.news .panel-body .container-fluid {
@@ -308,7 +370,7 @@ html, body {
}
.select-selected {
- background-color: #2ecc71;
+ background-color: var(--color-light);
}
.select-selected:after {
@@ -318,27 +380,27 @@ html, body {
right: 10px;
width: 0;
height: 0;
- border: 6px solid transparent;
- border-color: #fff transparent transparent transparent;
+ border: 6px solid;
+ border-color: var(--color-text) transparent transparent transparent;
}
.select-selected.select-arrow-active:after {
- border-color: transparent transparent #fff transparent;
+ border-color: transparent transparent var(--color-text) transparent;
top: 7px;
}
.select-items div,.select-selected {
- color: #fff;
+ color: var(--color-text);
padding: 8px 16px;
- border: 1px solid transparent;
- border-color: transparent transparent #cc1922 transparent;
+ border: 1px solid;
+ border-color: transparent transparent var(--color-dark) transparent;
cursor: pointer;
user-select: none;
}
.select-items {
position: absolute;
- background-color: #e31c26;
+ background-color: var(--color-light);
top: 100%;
left: 0;
right: 0;
@@ -350,105 +412,24 @@ html, body {
}
.select-items div:hover, .same-as-selected {
- background-color: #cc1922;
-}
-
-.input-group-addon {
- background-color: #e31c26 !important;
- border-color: #333 !important;
- color: #fff;
-}
-
-.form-group > label {
- color: #fff;
-}
-
-.table-bordered {
- border-color: #262626 !important;
- color: #fff !important;
-}
-
-.table-bordered > thead > tr > th {
- border-color: #e31c26;
- background-color: #e31c26;
-}
-
-.table-striped > tbody > tr > td {
- background-color: #262626;
- border-color: #666 !important;
-}
-
-.table-bordered > tbody >tr > td:first-child {
- border-left-color: #262626 !important;
-}
-
-.table-bordered > tbody >tr:last-child > td {
- border-bottom-color: #262626 !important;
-}
-
-
-.table-bordered > tbody >tr > td:last-child {
- border-right-color: #262626 !important;
-}
-
-.table-striped>tbody>tr:nth-of-type(odd) > td {
- background-color: #404040;
-}
-
-.pagination > li:first-child > a,
-.pagination > li:last-child > a {
- background-color: #e31c26 !important;
- border-color: #262626 !important;
-}
-
-.pagination > .disabled > a {
- color: #ccc !important;
-}
-
-.pagination li a {
- background-color: #404040;
- color: #fff;
- border-color: #202326 !important;
-}
-
-.pagination li:hover a {
- background-color: #666;
- color: #fff;
-}
-
-.pagination li.active a,
-.pagination li.active a:hover{
- background-color: #666;
- color: #fff;
-}
-
-.form-control,
-.form-control[disabled] {
- background-color: #404040;
- color: #fff;
- border-color: #262626 !important;
+ background-color: var(--color-dark);
}
.btn-custom {
outline: 0;
- background: #e31c26;
+ background: var(--color-light);
width: 180px;
border: 0;
padding: 5px;
- color: #FFFFFF;
+ color: var(--color-text);
font-size: 17px;
cursor: pointer;
border-radius: 3px;
}
-.panel {
- background-color: #282727;
- color: #fff;
-}
-
.btn-custom:hover,.btn-custom:active,.btn-custom:focus {
- background: #cc1922;
- color: #fff;
+ background: var(--color-dark);
+ color: var(--color-text);
}
.controls {
@@ -465,45 +446,6 @@ html, body {
filter: grayscale(100%) !important;
}
-.status, .attraction {
- font-weight: 900;
-}
-
-.control-status {
- padding: 5px 10px 5px 10px;
- border-radius: 5px;
- background-color: transparent;
- color: #333;
- font-weight: 900;
-}
-
-.control-status.status-unknown {
- background-color: #7f8c8d;
- color: #fff;
-}
-
-.control-status.status-closed {
- background-color: #c0392b;
- color: #fff;
-}
-
-.control-status.status-open {
- background-color: #2ecc71;
- color: #fff;
-}
-
-.control-status.status-inactive {
- background-color: #c0392b;
- color: #fff;
-}
-
-.actionfoto {
- width: calc(100% - 4px) !important;
- height: auto;
- border: 2px solid #fff;
- border-radius: 5px;
-}
-
code {
background-color: #eef1f6;
color: #596981;
@@ -524,24 +466,157 @@ code i {
}
.pagination li.active a {
- background-color: #e31c26;
+ background-color: var(--color-light);
border-color: transparent;
}
-.status, .attraction {
- font-weight: 900;
- color: #fff;
-}
-
-.status {
- padding: 5px;
- border-radius: 3px;
- text-align: center;
-}
-
.actionfoto {
width: calc(100% - 4px) !important;
height: auto;
border: 2px solid #fff;
border-radius: 5px;
}
+
+/* Status Card */
+.status-card-row {
+ margin-right: -15px;
+ margin-left: -15px;
+}
+
+.status-card {
+ margin: 10px 0 0;
+ float: left;
+ display: inline-block;
+ box-sizing: border-box;
+ border: 0;
+ border-radius: 15px;
+ color: rgba(0, 0, 0, 0.87);
+ width: 100%;
+ box-shadow: 0 0 8px 1px rgba(0, 0, 0, 0.3);
+ background: #fff center center;
+ background-size: cover;
+ text-align: center;
+ position: relative;
+ font-size: .775rem;
+ text-decoration: none !important;
+ overflow: hidden;
+}
+
+.status-card:after {
+ content: '\A';
+ position: absolute;
+ width: 100%;
+ height:100%;
+ top: 0;
+ left: 0;
+ background: rgba(0,0,0,0.3);
+}
+
+.status-card > .card-body {
+ position: relative;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ padding: 6.25rem 0;
+ -webkit-box-flex: 1;
+ z-index: 1;
+}
+
+.status-card .badge {
+ margin-top: 15px !important;
+}
+
+.badge {
+ display: inline-table;
+ margin: 0 auto;
+ border-radius: 5px;
+ padding: 10px 15px;
+ text-transform: uppercase;
+ font-size: 15px;
+ color: #fff;
+ font-weight: 500;
+ line-height: 1;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: baseline;
+}
+
+.status-card > .card-body > .card-title {
+ color: #fff;
+}
+
+/* Region */
+.region {
+ width: 100%;
+ display: inline-block;
+ position: relative;
+ padding-top: 65px;
+}
+
+.region:not(:first-child) {
+ margin-top: 15px;
+}
+
+.region > .region-title {
+ width: auto;
+ height: 0;
+ border-bottom: 25px solid var(--color-light);
+ border-top: 25px solid var(--color-light);
+ border-right: 15px solid transparent;
+ float: left;
+ padding-right: 20px;
+ font-size: 20px;
+ position: absolute;
+ left: 0;
+ top: 0;
+ border-radius: 10px 0 0 10px;
+}
+
+.region-title > span {
+ color: #fff;
+ position: relative;
+ top: -15px;
+ text-align: center;
+ left: 10px;
+}
+ /* Show Card */
+@media (min-width: 768px) {
+ .card-container {
+ display: flex;
+ justify-items: stretch;
+ }
+}
+
+.card {
+ position: relative;
+ display: flex;
+ flex-direction: column;
+ min-width: 0;
+ word-wrap: break-word;
+ background-color: #fff;
+ background-clip: border-box;
+ border-radius: 10px;
+ overflow: hidden;
+ margin-bottom: 15px;
+}
+
+.card .card-cover {
+ width: 100%;
+ display: block;
+}
+
+.card .card-body {
+ flex: 1 1 auto;
+ padding: 0 1.25rem 0.25rem;
+}
+
+.card .card-footer {
+ display: block;
+ padding: 0 1rem 1rem;
+ margin: 0;
+}
+
+.card .card-title {
+ font-weight: bolder;
+ margin-bottom: .75rem;
+}
diff --git a/public/assets/css/style_default.css b/public/assets/css/style_default.css
deleted file mode 100644
index d240770..0000000
--- a/public/assets/css/style_default.css
+++ /dev/null
@@ -1,462 +0,0 @@
-html, body {
- width: 100%;
- min-height: 100%;
- margin: 0;
- padding: 0;
- position: absolute;
- background: url("../img/background.jpg") no-repeat center center fixed;
- -webkit-background-size: cover;
- -moz-background-size: cover;
- -o-background-size: cover;
- background-size: cover;
- font-family: sans-serif;
-}
-
-.login-page {
- width: 360px;
- padding: 8% 0 0;
- margin: auto;
-}
-
-.login-page form {
- position: relative;
- z-index: 1;
- background: #FFFFFF;
- max-width: 360px;
- margin: 0 auto 100px;
- padding: 15px 45px 45px 45px;
- box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.2), 0 5px 5px 0 rgba(0, 0, 0, 0.24);
- border-radius: 3px;
-}
-
-.login-page form h1 {
- text-align: center;
-}
-
-.login-page form input {
- outline: 0;
- background: #f2f2f2;
- width: 100%;
- border: 0;
- margin: 0 0 15px;
- padding: 15px;
- box-sizing: border-box;
- font-size: 14px;
- border-radius: 3px;
-}
-
-.login-page form button {
- outline: 0;
- background: #2ecc71;
- width: 100%;
- border: 0;
- padding: 15px;
- color: #FFFFFF;
- font-size: 20px;
- cursor: pointer;
- border-radius: 3px;
-}
-
-.login-page form button:hover,.form button:active,.form button:focus {
- background: #27ae60;
-}
-
-.login-page form .message {
- margin: 15px 0 0;
- color: #7f8c8d;
- font-size: 14px;
-}
-
-.login-page form .message a {
- color: #27ae60;
- text-decoration: none;
-}
-
-.login-page form .message a:hover {
- color: #2ecc71;
-}
-
-.login-page form .register-form {
- display: none;
-}
-
-::-webkit-scrollbar {
- width: 0;
- background: transparent !important;
-}
-
-.wrapper {
- padding: 15px;
- width: 100% !important;
- margin-top: 75px !important;
- margin-bottom: 40px !important;
-}
-
-.footer {
- margin-bottom: 0;
- background-color: #fff;
- position: absolute;
- bottom: 0;
- text-align: center;
- padding: 10px;
- width: 100%;
- text-decoration: none;
-}
-
-.footer span {
- font-weight: 600;
-}
-
-.footer span a img {
- height: 20px !important;
-}
-
-
-.alert {
- color: #fff !important;
-}
-
-.alert-success {
- background-color: #2ecc71 !important;
- border: none !important;
-}
-
-.alert-danger {
- background-color: #e74c3c !important;
- border: none !important;
-}
-
-.panel-theme {
- border-color: #27ae60;
-}
-
-.panel-theme>.panel-heading {
- color: #fff !important;
- background-color: #2ecc71 !important;
- border-color: #27ae60 !important;
-}
-
-.panel-theme>.panel-heading+.panel-collapse>.panel-body {
- border-top-color: #27ae60 !important;
-}
-
-.panel-theme>.panel-footer+.panel-collapse>.panel-body {
- border-bottom-color: #27ae60 !important;
-}
-
-.navbar.navbar-theme {
- background-color: #2ecc71;
- border-color: transparent;
-}
-
-.navbar.navbar-theme .navbar-brand {
- color: #fff;
-}
-
-.navbar.navbar-theme .navbar-brand:hover,
-.navbar.navbar-theme .navbar-brand:focus {
- color: #fff;
-}
-
-.navbar.navbar-theme .navbar-nav > li > a {
- color: #fff;
- background-color: transparent;
-}
-
-.navbar.navbar-theme .navbar-nav > li > a:hover,
-.navbar.navbar-theme .navbar-nav > li > a:focus {
- color: #fff;
- background-color: #27ae60;
-}
-
-.navbar.navbar-theme .navbar-nav > .active > a,
-.navbar.navbar-theme .navbar-nav > .active > a:hover,
-.navbar.navbar-theme .navbar-nav > .active > a:focus {
- color: #fff;
- background-color: #27ae60;
-}
-
-.navbar.navbar-theme .navbar-nav > .open > a,
-.navbar.navbar-theme .navbar-nav > .open > a:hover,
-.navbar.navbar-theme .navbar-nav > .open > a:focus {
- color: #fff;
- background-color: #27ae60;
-}
-
-.navbar.navbar-theme .navbar-toggle {
- border-color: #fff;
- color: #2ecc71;
-}
-
-.navbar.navbar-theme .navbar-toggle:hover,
-.navbar.navbar-theme .navbar-toggle:focus {
- border-color: #fff;
- color: #27ae60;
-}
-
-.navbar.navbar-theme .navbar-toggle .icon-bar {
- background-color: #fff;
- color: #27ae60;
-}
-
-.navbar.navbar-theme .navbar-link {
- color: #fff;
- background-color: #27ae60;
-}
-
-.navbar.navbar-theme .navbar-link:hover {
- color: #fff;
- background-color: #27ae60;
-}
-
-.navbar.navbar-theme .dropdown-menu {
- background-color: #2ecc71;
- border-color: #27ae60;
- margin: 0 !important;
- padding: 0 !important;
-}
-
-.navbar.navbar-theme .dropdown-menu li {
- margin: 0 !important;
- padding: 0 !important;
-}
-
-.navbar.navbar-theme .dropdown-menu a {
- color: #fff;
- padding: 7px !important;
-}
-
-.navbar.navbar-theme .dropdown-menu a:focus,
-.navbar.navbar-theme .dropdown-menu a:hover {
- color: #fff;
- background-color: #27ae60;
-}
-
-.dropdown-menu .divider {
- background-color: #27ae60 !important;
-}
-
-.dropdown-menu .active a {
- background-color: #27ae60 !important;
-}
-
-.news .panel-body .container-fluid {
- word-wrap: break-word !important;
- overflow: hidden !important;
- margin: 0;
- padding: 0;
- width: 100% !important;
- height: auto !important;
-}
-
-.checkbox {
- margin-top: -10px;
-}
-
-.checkbox input[type="checkbox"] {
- opacity: 0;
-}
-
-.checkbox label {
- position: relative;
- display: inline-block;
- padding-left: 22px;
-}
-
-.checkbox label::before,
-.checkbox label::after {
- position: absolute;
- content: "";
- display: inline-block;
-}
-
-.checkbox label::before{
- height: 16px;
- width: 16px;
- border: 1px solid;
- left: 0px;
- top: 3px;
-}
-
-.checkbox label::after {
- height: 5px;
- width: 9px;
- border-left: 2px solid;
- border-bottom: 2px solid;
- transform: rotate(-45deg);
- left: 4px;
- top: 7px;
-}
-
-.checkbox input[type="checkbox"] + label::after {
- content: none;
-}
-
-.checkbox input[type="checkbox"]:checked + label::after {
- content: "";
-}
-
-.custom-select {
- position: relative;
-}
-
-.custom-select select {
- display: none;
-}
-
-.select-selected {
- background-color: #2ecc71;
-}
-
-.select-selected:after {
- position: absolute;
- content: "";
- top: 14px;
- right: 10px;
- width: 0;
- height: 0;
- border: 6px solid transparent;
- border-color: #fff transparent transparent transparent;
-}
-
-.select-selected.select-arrow-active:after {
- border-color: transparent transparent #fff transparent;
- top: 7px;
-}
-
-.select-items div,.select-selected {
- color: #fff;
- padding: 8px 16px;
- border: 1px solid transparent;
- border-color: transparent transparent #27ae60 transparent;
- cursor: pointer;
- user-select: none;
-}
-
-.select-items {
- position: absolute;
- background-color: #2ecc71;
- top: 100%;
- left: 0;
- right: 0;
- z-index: 99;
-}
-
-.select-hide {
- display: none;
-}
-
-.select-items div:hover, .same-as-selected {
- background-color: #27ae60;
-}
-
-.btn-custom {
- outline: 0;
- background: #2ecc71;
- width: 180px;
- border: 0;
- padding: 5px;
- color: #FFFFFF;
- font-size: 17px;
- cursor: pointer;
- border-radius: 3px;
-}
-
-.btn-custom:hover,.btn-custom:active,.btn-custom:focus {
- background: #27ae60;
-}
-
-.controls {
- padding: 0 !important;
- margin: 0 !important;
-}
-
-.controls img {
- width: 70% !important;
- height: auto !important;
-}
-
-.controls.disabled {
- filter: grayscale(100%) !important;
-}
-
-.status, .attraction {
- font-weight: 900;
-}
-
-.control-status {
- padding: 5px 10px 5px 10px;
- border-radius: 5px;
- background-color: transparent;
- color: #333;
- font-weight: 900;
-}
-
-.control-status.status-unknown {
- background-color: #7f8c8d;
- color: #fff;
-}
-
-.control-status.status-closed {
- background-color: #c0392b;
- color: #fff;
-}
-
-.control-status.status-open {
- background-color: #2ecc71;
- color: #fff;
-}
-
-.control-status.status-inactive {
- background-color: #c0392b;
- color: #fff;
-}
-
-.actionfoto {
- width: calc(100% - 4px) !important;
- height: auto;
- border: 2px solid #fff;
- border-radius: 5px;
-}
-
-code {
- background-color: #eef1f6;
- color: #596981;
- border-radius: 3px;
- padding: 3px;
- line-height: 1.4;
- font-size: 85%;
- border: 1px solid rgba(0, 0, 0, .1);
- display: block;
- width: 335px;
- text-align: right;
- margin: 0;
-}
-
-code i {
- float: left;
- margin: 3px;
-}
-
-.pagination li.active a {
- background-color: #2ecc71;
- border-color: transparent;
-}
-
-.status, .attraction {
- font-weight: 900;
- color: #fff;
-}
-
-.status {
- padding: 5px;
- border-radius: 3px;
- text-align: center;
-}
-
-.actionfoto {
- width: calc(100% - 4px) !important;
- height: auto;
- border: 2px solid #fff;
- border-radius: 5px;
-}
diff --git a/public/assets/img/background.jpg b/public/assets/img/background.jpg
deleted file mode 100644
index c0b703c..0000000
Binary files a/public/assets/img/background.jpg and /dev/null differ
diff --git a/public/assets/img/banner.png b/public/assets/img/banner.png
new file mode 100644
index 0000000..d443f1a
Binary files /dev/null and b/public/assets/img/banner.png differ
diff --git a/public/assets/img/default_logo.png b/public/assets/img/default_logo.png
new file mode 100644
index 0000000..5f0eba5
Binary files /dev/null and b/public/assets/img/default_logo.png differ
diff --git a/public/assets/img/logo-lg.png b/public/assets/img/logo-lg.png
deleted file mode 100644
index 88dcdf5..0000000
Binary files a/public/assets/img/logo-lg.png and /dev/null differ
diff --git a/public/assets/img/logo-light.png b/public/assets/img/logo-light.png
new file mode 100644
index 0000000..0cb492b
Binary files /dev/null and b/public/assets/img/logo-light.png differ
diff --git a/public/assets/img/logo-sm.png b/public/assets/img/logo-sm.png
deleted file mode 100644
index 60060b4..0000000
Binary files a/public/assets/img/logo-sm.png and /dev/null differ
diff --git a/public/assets/img/logo.png b/public/assets/img/logo.png
new file mode 100644
index 0000000..8e7ed5d
Binary files /dev/null and b/public/assets/img/logo.png differ
diff --git a/public/assets/js/operator.js b/public/assets/js/operator.js
new file mode 100644
index 0000000..a56877d
--- /dev/null
+++ b/public/assets/js/operator.js
@@ -0,0 +1,329 @@
+function click(selector, callback) {
+ document.addEventListener('click', e => {
+ if(!e.target)
+ return
+
+ if(!e.target.matches(selector))
+ return
+
+ callback(e.target)
+ })
+}
+
+click("#template_toggle", template_switch => {
+ let is_template = document.getElementById('is_template')
+ is_template.parentElement.parentElement.parentElement.style.display = template_switch.checked === true ? 'none' : 'block'
+
+ let permission = document.getElementById('permission')
+ permission.style.display = template_switch.checked === true ? 'none' : is_template.checked ? 'none' : 'table'
+
+ document.getElementById('start_command').style.display = template_switch.checked === true ? 'none' : is_template.checked ? 'none' : 'table'
+ document.getElementById('stop_command').style.display = template_switch.checked === true ? 'none' : is_template.checked ? 'none' : 'table'
+ document.getElementById('template').style.display = template_switch.checked === true ? 'table' : 'none'
+
+ let items = permission.parentElement.querySelector("div[id=items]")
+ items = items.querySelectorAll('input')
+ items.forEach(value => {
+ let name = value.getAttribute('name')
+ if (name.endsWith('[0]'))
+ return
+
+ if (name.endsWith('[3]')) {
+ value.parentElement.style.display = template_switch.checked === true ? 'table' : is_template.checked ? 'none' : 'table'
+ } else {
+ value.parentElement.style.display = template_switch.checked === true ? 'none' : 'table'
+ }
+ })
+})
+
+click('#is_template', template_switch => {
+ let permission = document.getElementById('permission')
+ permission.style.display = template_switch.checked === true ? 'none' : 'table'
+
+ document.getElementById('start_command').style.display = template_switch.checked === true ? 'none' : 'table'
+ document.getElementById('stop_command').style.display = template_switch.checked === true ? 'none' : 'table'
+
+ let items = permission.parentElement.querySelector("div[id=items]")
+ items = items.querySelectorAll('input')
+ items.forEach(value => {
+ let name = value.getAttribute('name')
+ if(!name.endsWith('[3]'))
+ return
+
+ value.parentElement.style.display = template_switch.checked === true ? 'none' : 'table'
+ })
+})
+
+click('h3 > .btn', btn => {
+ let group = btn.parentElement.parentElement;
+ if(!group)
+ return
+
+ if(btn.innerHTML === 'Add Item') {
+ addItem(group)
+ } else if(btn.innerHTML === 'Add State') {
+ addState(group)
+ }
+})
+
+click('.toggle > .fas', toggle => {
+ let group = toggle.parentElement.parentElement.parentElement;
+ let states = group.querySelector("div[id^=states_]")
+ if(!states)
+ return
+
+ let hidden = states.style.display === 'none';
+ states.style.display = hidden ? 'block' : 'none';
+
+ if(hidden) {
+ toggle.classList.remove('fa-chevron-circle-down')
+ toggle.classList.add('fa-chevron-circle-up')
+ } else {
+ toggle.classList.add('fa-chevron-circle-down')
+ toggle.classList.remove('fa-chevron-circle-up')
+ }
+})
+
+click('#sync', () => rideExport())
+
+function rideExport() {
+ let data = serialize(document.getElementById('operator-form'))
+ if(!data.hasOwnProperty('id') || !data.hasOwnProperty('template_toggle') || !data['items'] || !data['states'])
+ return
+
+ if(data['template_toggle']) {
+ delete data['permission']
+ if(!data['template'])
+ return
+ } else {
+ delete data['template']
+ if(data['is_template']) {
+ delete data['permission']
+ } else if(!data.hasOwnProperty('permission'))
+ return
+ }
+
+ let use_template = data['template_toggle']
+ let is_template = data['is_template']
+ delete data['template_toggle']
+ delete data['is_template']
+
+ let items = data['items']
+ data['items'] = {}
+ items.forEach(value => {
+ let obj = {}
+ if(!use_template) {
+ obj['name'] = value[1]
+ obj['active_state'] = value[2]
+ }
+
+ obj['states'] = {}
+ data['items'][value[0]] = obj
+ })
+
+ let states = data['states']
+ delete data['states']
+ states.forEach((value, index) => {
+ let item = items[index]
+ value.forEach(value => {
+ let obj = {}
+ if(!use_template) {
+ obj['name'] = value[1]
+ obj['cover'] = value[2]
+ if(!is_template)
+ obj['command'] = value[3]
+
+ obj['text_color'] = value[4]
+ obj['background_color'] = value[5]
+ obj['glow'] = value[6]
+ } else {
+ obj['command'] = value[3]
+ }
+
+ data['items'][item[0]]['states'][value[0]] = obj
+ })
+ })
+
+ Object.entries(data['items']).forEach(entry => {
+ if(cleanItems(entry[1]))
+ delete data['items'][entry[0]]
+ })
+
+ document.getElementById('file_name').innerHTML = data['id']+'.json'
+ delete data['id']
+
+ document.getElementById('output').innerHTML = JSON.stringify(data, null, 2)
+ .replace('\n', '
')
+}
+
+function addItem(group) {
+ let items = group.querySelector("div[id=items]")
+ if(!items)
+ return
+
+ let items_size = group.querySelectorAll('div[id=items] > .group')
+ if(!items_size)
+ return
+
+ let style = document.getElementById('template_toggle').checked ? ' style="display: none"' : ''
+
+ items_size = items_size.length;
+ items.insertAdjacentHTML('beforeend',
+ ' \n' +
+ '
\n' +
+ ' \n' +
+ ' \n' +
+ '
\n' +
+ '
\n' +
+ ' \n' +
+ ' \n' +
+ '
\n' +
+ '
\n' +
+ ' \n' +
+ ' \n' +
+ '
\n' +
+ '\n' +
+ '
\n' +
+ '
\n' +
+ '
' +
+ '
')
+}
+
+function addState(group) {
+ let states = group.querySelector("div[id^=states_]")
+ if(!states)
+ return
+
+ let index = parseInt(states.id.replace('states_', ''))
+ if(!index && index !== 0)
+ return
+
+ let states_size = states.getElementsByClassName('group')
+ if(!states_size)
+ return
+
+ let style = document.getElementById('template_toggle').checked ? ' style="display: none"' : ''
+
+ states_size = states_size.length;
+ states.insertAdjacentHTML('beforeend',
+ ' \n')
+}
+
+function cleanItems(data) {
+ let b = false;
+ Object.entries(data).forEach(entry => {
+ let key = entry[0]
+ let value = entry[1]
+ if(!key || !value) {
+ delete data[key]
+ b = true
+ return
+ }
+
+ if(typeof value === 'object') {
+ if (cleanItems(value)) {
+ if (JSON.stringify(value) === '{}') {
+ delete data[key]
+ b = true
+ }
+ }
+ }
+ })
+
+ return b
+}
+
+function serialize(element) {
+ if(!element)
+ return {}
+
+ let inputs = element.querySelectorAll('input')
+ if(!inputs)
+ return {}
+
+ let out = {}
+ inputs.forEach(value => {
+ let name = value.getAttribute('name')
+ if(!name)
+ return
+
+ if(!name.endsWith(']')) {
+ out[name] = getValue(value)
+ return
+ }
+
+ serializeNested(out, name, getValue(value))
+ })
+
+ return out
+}
+
+function serializeNested(out, name, val) {
+ let matches = [...name.matchAll(/\[([0-9]+)\]/g)]
+ name = name.replaceAll(/(\[([0-9]+)\])+/g, '')
+
+ let array;
+ if(out.hasOwnProperty(name)) {
+ array = out[name]
+ } else {
+ array = []
+ out[name] = array
+ }
+
+ matches.forEach((value, index) => {
+ let id = value[1]
+ if(index === (matches.length - 1)) {
+ array[id] = val
+ } else {
+ if (array.hasOwnProperty(id)) {
+ array = array[id]
+ } else {
+ array[id] = []
+ array = array[id]
+ }
+ }
+ })
+}
+
+function getValue(element) {
+ if(element.matches('[type="checkbox"]'))
+ return element.checked
+
+ return element.value
+}
diff --git a/public/assets/minified/themes/default.min.css b/public/assets/minified/themes/default.min.css
index b7208c8..4e999ff 100644
--- a/public/assets/minified/themes/default.min.css
+++ b/public/assets/minified/themes/default.min.css
@@ -1,5 +1,5 @@
/*! SCEditor | (C) 2011-2016, Sam Clarke | sceditor.com/license */.sceditor-button div,div.sceditor-grip{background-image:url(famfamfam.png);background-repeat:no-repeat;width:16px;height:16px}.sceditor-button-youtube div{background-position:0 0}.sceditor-button-link div{background-position:0 -16px}.sceditor-button-unlink div{background-position:0 -32px}.sceditor-button-underline div{background-position:0 -48px}.sceditor-button-time div{background-position:0 -64px}.sceditor-button-table div{background-position:0 -80px}.sceditor-button-superscript div{background-position:0 -96px}.sceditor-button-subscript div{background-position:0 -112px}.sceditor-button-strike div{background-position:0 -128px}.sceditor-button-source div{background-position:0 -144px}.sceditor-button-size div{background-position:0 -160px}.sceditor-button-rtl div{background-position:0 -176px}.sceditor-button-right div{background-position:0 -192px}.sceditor-button-removeformat div{background-position:0 -208px}.sceditor-button-quote div{background-position:0 -224px}.sceditor-button-print div{background-position:0 -240px}.sceditor-button-pastetext div{background-position:0 -256px}.sceditor-button-paste div{background-position:0 -272px}.sceditor-button-outdent div{background-position:0 -288px}.sceditor-button-orderedlist div{background-position:0 -304px}.sceditor-button-maximize div{background-position:0 -320px}.sceditor-button-ltr div{background-position:0 -336px}.sceditor-button-left div{background-position:0 -352px}.sceditor-button-justify div{background-position:0 -368px}.sceditor-button-italic div{background-position:0 -384px}.sceditor-button-indent div{background-position:0 -400px}.sceditor-button-image div{background-position:0 -416px}.sceditor-button-horizontalrule div{background-position:0 -432px}.sceditor-button-format div{background-position:0 -448px}.sceditor-button-font div{background-position:0 -464px}.sceditor-button-emoticon div{background-position:0 -480px}.sceditor-button-email div{background-position:0 -496px}.sceditor-button-date div{background-position:0 -512px}.sceditor-button-cut div{background-position:0 -528px}.sceditor-button-copy div{background-position:0 -544px}.sceditor-button-color div{background-position:0 -560px}.sceditor-button-code div{background-position:0 -576px}.sceditor-button-center div{background-position:0 -592px}.sceditor-button-bulletlist div{background-position:0 -608px}.sceditor-button-bold div{background-position:0 -624px}div.sceditor-grip{background-position:0 -640px}.rtl div.sceditor-grip{background-position:0 -650px;right:auto;left:0}.sceditor-container{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-direction:column;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;position:relative;background:padding-box #fff;border:1px solid #d9d9d9;font-size:13px;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;color:#333;line-height:1;font-weight:700;height:250px;border-radius:4px}.sceditor-container *,.sceditor-container :after,.sceditor-container :before{-webkit-box-sizing:content-box;box-sizing:content-box}.sceditor-container,.sceditor-container div,div.sceditor-dropdown,div.sceditor-dropdown div{padding:0;margin:0;z-index:3}.sceditor-container iframe,.sceditor-container textarea{display:block;-ms-flex:1 1 0%;-webkit-box-flex:1;flex:1 1 0%;line-height:1.25;border:0;outline:0;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:14px;color:#111;padding:0;margin:5px;resize:none;background:#fff;height:auto!important;width:auto!important;width:calc(100% - 10px)!important;min-height:1px}.sceditor-container textarea{margin:7px 5px}div.sceditor-dnd-cover{position:absolute;top:0;left:0;bottom:0;right:0;background:rgba(255,255,255,.2);border:5px dashed #aaa;z-index:200;font-size:2em;text-align:center;color:#aaa}div.sceditor-dnd-cover p{position:relative;top:45%;pointer-events:none}div.sceditor-resize-cover{position:absolute;top:0;left:0;background:#000;width:100%;height:100%;z-index:10;opacity:.3}div.sceditor-grip{overflow:hidden;width:10px;height:10px;cursor:pointer;position:absolute;bottom:0;right:0;z-index:3;line-height:0}div.sceditor-grip.has-icon{background-image:none}.sceditor-maximize{position:fixed;top:0;left:0;height:100%!important;width:100%!important;border-radius:0;background-clip:padding-box;z-index:2000}body.sceditor-maximize,html.sceditor-maximize{height:100%;width:100%;padding:0;margin:0;overflow:hidden}.sceditor-maximize div.sceditor-grip{display:none}.sceditor-maximize div.sceditor-toolbar{border-radius:0;background-clip:padding-box}div.sceditor-dropdown{position:absolute;border:1px solid #ccc;background:padding-box #fff;z-index:4000;padding:10px;font-weight:400;font-size:15px;border-radius:2px;-webkit-box-shadow:1px 2px 4px rgba(0,0,0,.2);box-shadow:1px 2px 4px rgba(0,0,0,.2)}div.sceditor-dropdown *,div.sceditor-dropdown :after,div.sceditor-dropdown :before{-webkit-box-sizing:border-box;box-sizing:border-box}div.sceditor-dropdown a,div.sceditor-dropdown a:link{color:#333}div.sceditor-dropdown form{margin:0}div.sceditor-dropdown label{display:block;font-weight:700;color:#3c3c3c;padding:4px 0}div.sceditor-dropdown input,div.sceditor-dropdown textarea{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;outline:0;padding:4px;border:1px solid #ccc;border-top-color:#888;margin:0 0 .75em;border-radius:1px;background-clip:padding-box}div.sceditor-dropdown textarea{padding:6px}div.sceditor-dropdown input:focus,div.sceditor-dropdown textarea:focus{border-color:#666 #aaa #aaa;-webkit-box-shadow:inset 0 1px 5px rgba(0,0,0,.1);box-shadow:inset 0 1px 5px rgba(0,0,0,.1)}div.sceditor-dropdown .button{font-weight:700;color:#444;padding:6px 12px;background:padding-box #ececec;border:1px solid #ccc;border-radius:2px;cursor:pointer;margin:.3em 0 0}div.sceditor-dropdown .button:hover{background:#f3f3f3;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.15);box-shadow:0 1px 1px rgba(0,0,0,.15)}div.sceditor-font-picker,div.sceditor-fontsize-picker,div.sceditor-format{padding:6px 0}div.sceditor-color-picker{padding:4px}div.sceditor-emoticons,div.sceditor-more-emoticons{padding:0}.sceditor-pastetext textarea{border:1px solid #bbb;width:20em}.sceditor-emoticons img,.sceditor-more-emoticons img{padding:0;cursor:pointer;margin:2px}.sceditor-more{border-top:1px solid #bbb;display:block;text-align:center;cursor:pointer;font-weight:700;padding:6px 0}.sceditor-dropdown a:hover{background:#eee}.sceditor-font-option,.sceditor-fontsize-option,.sceditor-format a{display:block;padding:7px 10px;cursor:pointer;text-decoration:none;color:#222}.sceditor-fontsize-option{padding:7px 13px}.sceditor-color-column{float:left}.sceditor-color-option{display:block;border:2px solid #fff;height:18px;width:18px;overflow:hidden}.sceditor-color-option:hover{border:1px solid #aaa}div.sceditor-toolbar{-ms-flex-negative:0;flex-shrink:0;overflow:hidden;padding:3px 5px 2px;background:padding-box #f7f7f7;border-bottom:1px solid silver;line-height:0;text-align:left;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-radius:3px 3px 0 0}div.sceditor-group{display:inline-block;background:padding-box #ddd;margin:1px 5px 1px 0;padding:1px;border-bottom:1px solid #aaa;border-radius:3px}.sceditor-button{float:left;cursor:pointer;padding:3px 5px;width:16px;height:20px;border-radius:3px;background-clip:padding-box}.sceditor-button.active,.sceditor-button:active,.sceditor-button:hover{background:#fff;-webkit-box-shadow:inset 1px 1px 0 rgba(0,0,0,.3),inset -1px 0 rgba(0,0,0,.3),inset 0 -1px 0 rgba(0,0,0,.2);box-shadow:inset 1px 1px 0 rgba(0,0,0,.3),inset -1px 0 rgba(0,0,0,.3),inset 0 -1px 0 rgba(0,0,0,.2)}.sceditor-button:active{background:#fff;-webkit-box-shadow:inset 1px 1px 0 rgba(0,0,0,.3),inset -1px 0 rgba(0,0,0,.3),inset 0 -1px 0 rgba(0,0,0,.2),inset 0 0 8px rgba(0,0,0,.3);box-shadow:inset 1px 1px 0 rgba(0,0,0,.3),inset -1px 0 rgba(0,0,0,.3),inset 0 -1px 0 rgba(0,0,0,.2),inset 0 0 8px rgba(0,0,0,.3)}.sceditor-button.disabled:hover{background:inherit;cursor:default;-webkit-box-shadow:none;box-shadow:none}.sceditor-button,.sceditor-button div{display:block}.sceditor-button svg{display:inline-block;height:16px;width:16px;margin:2px 0;fill:#111;text-decoration:none;pointer-events:none;line-height:1}.sceditor-button.disabled svg{fill:#888}.sceditor-button div{display:inline-block;margin:2px 0;padding:0;overflow:hidden;line-height:0;font-size:0;color:transparent}.sceditor-button.has-icon div{display:none}.sceditor-button.disabled div{opacity:.3}.sceditor-button.text,.sceditor-button.text div,.sceditor-button.text-icon,.sceditor-button.text-icon div,.text .sceditor-button,.text .sceditor-button div,.text-icon .sceditor-button,.text-icon .sceditor-button div{display:inline-block;width:auto;line-height:16px;font-size:1em;color:inherit;text-indent:0}.sceditor-button.has-icon div,.sceditor-button.text div,.text .sceditor-button div,.text-icon .sceditor-button.has-icon div{padding:0 2px;background:0 0}.sceditor-button.text svg,.text .sceditor-button svg{display:none}.sceditor-button.text-icon div,.text-icon .sceditor-button div{padding:0 2px 0 20px}.rtl div.sceditor-toolbar{text-align:right}.rtl .sceditor-button{float:right}
body, p {
- color: #fff !important;
+ color: #333 !important;
font-family: sans-serif !important;
}
diff --git a/public/favicon.ico b/public/favicon.ico
index dd24a71..eeb953c 100644
Binary files a/public/favicon.ico and b/public/favicon.ico differ
diff --git a/resources/views/2fa/authenticate.blade.php b/resources/views/2fa/authenticate.blade.php
index 9ff6f39..5f6a24d 100644
--- a/resources/views/2fa/authenticate.blade.php
+++ b/resources/views/2fa/authenticate.blade.php
@@ -1,95 +1,26 @@
-
-
-
-
-
-
-
- {{ config('app.name', 'ThemePark') }}
+@extends('layouts.default')
-
-
-
-
-
+@section('body')
+