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("

"+title+"

"+text+"

\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' + + '

States Add State

\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' + + '
\n' + + ' \n' + + ' \n' + + '
\n' + + '
\n' + + ' \n' + + ' \n' + + '
\n' + + '
\n' + + ' \n' + + ' \n' + + '
\n' + + '
\n' + + ' \n' + + ' \n' + + '
\n' + + '
\n' + + ' \n' + + ' \n' + + '
\n' + + '
\n' + + ' \n' + + ' \n' + + '
\n' + + '
\n' + + '
\n' + + ' \n' + + '
\n' + + '
\n' + + '

Glows

\n' + + '
\n' + + '
\n' + + '
\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') +
+
+
+ @csrf + @component('components.title') + @endcomponent -
-
- - @csrf -

ThemePark

- -
-
- - +
+
+ + +
+ @error('two_factor') + {{ $message }} + @enderror
- @error('two_factor') - {{ $message }} - @enderror -
- - {{ __('Logout') }} - -
-
- -
-
- Copyright © 2019-{{ date('Y') }} IOByte. All Rights Reserved. -
-
- - - - - - - - -@section('content') -
-
-
-
-
{{ __('2FA Authenticate') }}
- -
-
- @csrf - -
- - -
- - - @error('two_factor') - - {{ $message }} - - @enderror -
-
- -
-
- -
-
-
-
-
+ + {{ __('Logout') }} +
-
@endsection diff --git a/resources/views/auth/login.blade.php b/resources/views/auth/login.blade.php index 8baa58f..f43535e 100644 --- a/resources/views/auth/login.blade.php +++ b/resources/views/auth/login.blade.php @@ -1,27 +1,12 @@ - - - - - - - - {{ config('app.name', 'Laravel') }} - - - - - - +@extends('layouts.default') +@section('body')
@csrf -

ThemePark

+ @component('components.title') + @endcomponent @if($errors->any())
- -
-
- Copyright © 2019-{{ date('Y') }} IOByte. All Rights Reserved. -
-
- - - - - - +@endsection diff --git a/resources/views/auth/passwords/email.blade.php b/resources/views/auth/passwords/email.blade.php index 21daed5..e77ca60 100644 --- a/resources/views/auth/passwords/email.blade.php +++ b/resources/views/auth/passwords/email.blade.php @@ -1,27 +1,12 @@ - - - - - - - - {{ config('app.name', 'Laravel') }} - - - - - - +@extends('layouts.default') +@section('body')
@csrf -

ThemePark

+ @component('components.title') + @endcomponent @if(session('status'))
- -
-
- Copyright © 2019-{{ date('Y') }} IOByte. All Rights Reserved. -
-
- - - - - - +@endsection diff --git a/resources/views/auth/passwords/reset.blade.php b/resources/views/auth/passwords/reset.blade.php index cf90aee..5aa834c 100644 --- a/resources/views/auth/passwords/reset.blade.php +++ b/resources/views/auth/passwords/reset.blade.php @@ -1,28 +1,13 @@ - - - - - - - - {{ config('app.name', 'Laravel') }} - - - - - - +@extends('layouts.default') +@section('body')
@csrf -

ThemePark

+ @component('components.title') + @endcomponent
@@ -53,17 +38,4 @@
- -
-
- Copyright © 2019-{{ date('Y') }} IOByte. All Rights Reserved. -
-
- - - - - - +@endsection diff --git a/resources/views/auth/register.blade.php b/resources/views/auth/register.blade.php index 48bd3e5..b6e2a2c 100644 --- a/resources/views/auth/register.blade.php +++ b/resources/views/auth/register.blade.php @@ -1,27 +1,12 @@ - - - - - - - - {{ config('app.name', 'Laravel') }} - - - - - - +@extends('layouts.default') +@section('body')
@csrf -

ThemePark

+ @component('components.title') + @endcomponent @if($errors->any())
+@endsection -
-
- Copyright © 2019-{{ date('Y') }} IOByte. All Rights Reserved. -
-
- - - - +@section('javascript') - - +@endsection diff --git a/resources/views/auth/verify.blade.php b/resources/views/auth/verify.blade.php index 8868b84..37feb61 100644 --- a/resources/views/auth/verify.blade.php +++ b/resources/views/auth/verify.blade.php @@ -1,25 +1,10 @@ - - - - - - - - {{ config('app.name', 'Laravel') }} - - - - - - +@extends('layouts.default') +@section('body')
-

ThemePark

+ @component('components.title') + @endcomponent @if (session('resent'))
- -
-
- Copyright © 2019-{{ date('Y') }} IOByte. All Rights Reserved. -
-
- - - - - - +@endsection diff --git a/resources/views/components/attraction.blade.php b/resources/views/components/attraction.blade.php new file mode 100644 index 0000000..e856f3a --- /dev/null +++ b/resources/views/components/attraction.blade.php @@ -0,0 +1,8 @@ + diff --git a/resources/views/components/navbar.blade.php b/resources/views/components/navbar.blade.php new file mode 100644 index 0000000..6905609 --- /dev/null +++ b/resources/views/components/navbar.blade.php @@ -0,0 +1,28 @@ + + + diff --git a/resources/views/components/panel.blade.php b/resources/views/components/panel.blade.php new file mode 100644 index 0000000..ba60ec9 --- /dev/null +++ b/resources/views/components/panel.blade.php @@ -0,0 +1,8 @@ +
+
+

{{ $title }}

+
+
+ {{ $slot }} +
+
diff --git a/resources/views/components/region.blade.php b/resources/views/components/region.blade.php new file mode 100644 index 0000000..24b112d --- /dev/null +++ b/resources/views/components/region.blade.php @@ -0,0 +1,11 @@ +
+
+ {{ \App\Color\MinecraftColor::stripColor($region->name) }} +
+
+ @foreach($region->attractions as $attraction) + @component('components.attraction', ['attraction' => $attraction]) + @endcomponent + @endforeach +
+
diff --git a/resources/views/components/show.blade.php b/resources/views/components/show.blade.php new file mode 100644 index 0000000..cdc856f --- /dev/null +++ b/resources/views/components/show.blade.php @@ -0,0 +1,16 @@ +
+ +
+

{{ $show->title }}

+

{{ $show->description }}

+ + @if(isset($body)) + {{ $body }} + @endif +
+ @if(isset($slot) && !empty(str_replace(' ', '', $slot))) + + @endif +
diff --git a/resources/views/components/title.blade.php b/resources/views/components/title.blade.php new file mode 100644 index 0000000..4e7d1c6 --- /dev/null +++ b/resources/views/components/title.blade.php @@ -0,0 +1,7 @@ +@if(!empty(env('APP_LOGO', ''))) +
+ +
+@else +

{{ env('APP_NAME', 'ThemePark') }}

+@endif diff --git a/resources/views/control.blade.php b/resources/views/control.blade.php deleted file mode 100644 index e82884b..0000000 --- a/resources/views/control.blade.php +++ /dev/null @@ -1,55 +0,0 @@ -@extends('layouts.main') - -@section('content') -
-
-
-
-
-

Information

-
-
-
- -
-

Username: {{ Auth::user()->username() }} -
Attraction: {{ $attraction_name }}

-

Control: Disconnected

-

Status: Unknown

-
-
-
-
-
-
-
-
-
-
- - -@endsection - -@section('javascript') - - -@endsection diff --git a/resources/views/emails/change.blade.php b/resources/views/emails/change.blade.php index d8e150d..8eb6193 100644 --- a/resources/views/emails/change.blade.php +++ b/resources/views/emails/change.blade.php @@ -1,13 +1,13 @@ @component('mail::message') -Dear {{ $user->firstname }} + Dear {{ $user->firstname }} -Press the button bellow if you wish to change your current email-address -@component('mail::button', ['url' => route('verify_email', ['id' => $user->id, 'token' => $token, 'email' => $email])]) -Change Email -@endcomponent - -Is this email not directed to you or do you not wish to change your email? Than you may ignore this. - -Thanks,
-{{ config('app.name') }} + Press the button bellow if you wish to change your current email-address + @component('mail::button', ['url' => route('verify_email', ['id' => $user->id, 'token' => $token, 'email' => $email])]) + Change Email + @endcomponent + + Is this email not directed to you or do you not wish to change your email? Than you may ignore this. + + Thanks,
+ {{ config('app.name') }} @endcomponent diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php index ad9b788..379511e 100644 --- a/resources/views/home.blade.php +++ b/resources/views/home.blade.php @@ -1,22 +1,19 @@ @extends('layouts.main') @section('content') -
-
- @php($message = \App\Message::orderByDesc('id')->first()) - @if(!empty($message)) -
-
- @php($time = strtotime($message->created_at)) -

{{ \App\Cache\Cache::getUsername($message->uuid) }}{{ date('d-m-Y', $time) }} at {{ date('H:m', $time) }}

-
-
-
- {!! $message->content !!} -
+
+
+
+ @if(!empty($message)) + @component('components.panel') + @slot('title') + @php($time = strtotime($message->created_at)) + {{ \App\Cache\Cache::getUsername($message->uuid) }}{{ date('d-m-Y', $time) }} at {{ date('H:m', $time) }} + @endslot + {!! $message->content !!} + @endcomponent + @endif
- @endif
-
@endsection diff --git a/resources/views/layouts/admin.blade.php b/resources/views/layouts/admin.blade.php index 8db925d..552bc60 100644 --- a/resources/views/layouts/admin.blade.php +++ b/resources/views/layouts/admin.blade.php @@ -36,8 +36,8 @@