Stuff
|
@ -7,7 +7,9 @@
|
|||
<sourceFolder url="file://$MODULE_DIR$/database/seeders" isTestSource="false" packagePrefix="Database\Seeders\" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/app" isTestSource="false" packagePrefix="App\" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/database/factories" isTestSource="false" packagePrefix="Database\Factories\" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/almasaeed2010/adminlte" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/asm89/stack-cors" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/aws/aws-sdk-php" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/brick/math" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/composer" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/dnoegel/php-xdg-base-dir" />
|
||||
|
@ -24,6 +26,7 @@
|
|||
<excludeFolder url="file://$MODULE_DIR$/vendor/filp/whoops" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/fruitcake/laravel-cors" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/graham-campbell/result-type" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/gumlet/php-image-resize" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/guzzlehttp/guzzle" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/guzzlehttp/promises" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/guzzlehttp/psr7" />
|
||||
|
@ -33,9 +36,11 @@
|
|||
<excludeFolder url="file://$MODULE_DIR$/vendor/laravel/tinker" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/league/commonmark" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/league/flysystem" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/league/flysystem-aws-s3-v3" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/league/mime-type-detection" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/mockery/mockery" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/monolog/monolog" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/mtdowling/jmespath.php" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/myclabs/deep-copy" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/nesbot/carbon" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/nikic/php-parser" />
|
||||
|
|
|
@ -108,6 +108,11 @@
|
|||
<path value="$PROJECT_DIR$/vendor/mockery/mockery" />
|
||||
<path value="$PROJECT_DIR$/vendor/filp/whoops" />
|
||||
<path value="$PROJECT_DIR$/vendor/theseer/tokenizer" />
|
||||
<path value="$PROJECT_DIR$/vendor/almasaeed2010/adminlte" />
|
||||
<path value="$PROJECT_DIR$/vendor/league/flysystem-aws-s3-v3" />
|
||||
<path value="$PROJECT_DIR$/vendor/aws/aws-sdk-php" />
|
||||
<path value="$PROJECT_DIR$/vendor/mtdowling/jmespath.php" />
|
||||
<path value="$PROJECT_DIR$/vendor/gumlet/php-image-resize" />
|
||||
</include_path>
|
||||
</component>
|
||||
<component name="PhpUnit">
|
||||
|
|
79
app/Console/Commands/CalculateSpace.php
Normal file
|
@ -0,0 +1,79 @@
|
|||
<?php
|
||||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use App\Models\Gallery;
|
||||
use App\Models\Image;
|
||||
use Illuminate\Console\Command;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
|
||||
class CalculateSpace extends Command
|
||||
{
|
||||
/**
|
||||
* The name and signature of the console command.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $signature = 'calculate:space';
|
||||
|
||||
/**
|
||||
* The console command description.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $description = 'Command description';
|
||||
|
||||
/**
|
||||
* Create a new command instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute the console command.
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
$day = date("Y-m-d");
|
||||
$day = "2021-01-11";
|
||||
$galleries = Gallery::query()->get();
|
||||
for ($i = 0; $i <= 24; $i++) {
|
||||
foreach ($galleries as $gallery) {
|
||||
//Get file size for that hour for that gallery
|
||||
$start = $day." ".$i.":00:00";
|
||||
$end = $day." ".$i.":59:59";
|
||||
$sql = "SELECT SUM(size) AS size FROM `go-mysql-admin`.images WHERE gallery = ".$gallery->id." AND uploaded_at < \"".$start."\" AND (deleted_at > \"".$end."\" OR deleted_at IS NULL);";
|
||||
$size = DB::select($sql)[0]->size;
|
||||
$split = explode("-", $day);
|
||||
$storage = \App\Models\Storage::query()
|
||||
->where("gallery", "=", $gallery->id)
|
||||
->where("tenant", "=", $gallery->tenant)
|
||||
->where("date", "=", $day)
|
||||
->where("hour", "=", $i)
|
||||
->first();
|
||||
if(is_null($storage)) {
|
||||
$storage = new \App\Models\Storage();
|
||||
$storage->date = $day;
|
||||
$storage->year = $split[0];
|
||||
$storage->month = $split[1];
|
||||
$storage->day = $split[2];
|
||||
$storage->hour = $i;
|
||||
$storage->gallery = $gallery->id;
|
||||
$storage->tenant = $gallery->tenant;
|
||||
}
|
||||
if($storage->size != $size) {
|
||||
$storage->size = $size;
|
||||
$storage->saveOrFail();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
83
app/Console/Commands/CalculateTraffic.php
Normal file
|
@ -0,0 +1,83 @@
|
|||
<?php
|
||||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use App\Models\Access;
|
||||
use App\Models\Traffic;
|
||||
use Illuminate\Console\Command;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class CalculateTraffic extends Command
|
||||
{
|
||||
/**
|
||||
* The name and signature of the console command.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $signature = 'calculate:traffic';
|
||||
|
||||
/**
|
||||
* The console command description.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $description = 'Recalculate the Traffic for all Access Data';
|
||||
|
||||
/**
|
||||
* Create a new command instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute the console command.
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
$result = [];
|
||||
$res = DB::select("SELECT * FROM access");
|
||||
foreach($res as $r) {
|
||||
$key = $r->tenant."-".$r->gallery."-".$r->year."-".$r->month."-".$r->day."-".$r->hour;
|
||||
if(isset($result[$key])) {
|
||||
$result[$key] = $result[$key] + $r->size;
|
||||
} else {
|
||||
$result[$key] = $r->size;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//Save result in db
|
||||
var_dump($result);
|
||||
foreach ($result as $key => $trafficSize) {
|
||||
$split = explode("-", $key);
|
||||
$traffic = Traffic::query()
|
||||
->where("tenant", "=", (int)$split[0])
|
||||
->where("gallery", "=", (int)$split[1])
|
||||
->where("year", "=", (int)$split[2])
|
||||
->where("month", "=", (int)$split[3])
|
||||
->where("day", "=", (int)$split[4])
|
||||
->where("hour", "=", (int)$split[5])
|
||||
->first();
|
||||
if($traffic == null) {
|
||||
$traffic = new Traffic();
|
||||
$traffic->tenant = $split[0];
|
||||
$traffic->gallery = $split[1];
|
||||
$traffic->year = $split[2];
|
||||
$traffic->month =$split[3];
|
||||
$traffic->day = $split[4];
|
||||
$traffic->hour = $split[5];
|
||||
$traffic->date = $split[2]."-".$split[3]."-".$split[4];
|
||||
}
|
||||
if($traffic->traffic != $trafficSize) {
|
||||
$traffic->traffic = $trafficSize;
|
||||
$traffic->saveOrFail();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
61
app/Http/Controllers/AccountController.php
Normal file
|
@ -0,0 +1,61 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Tenant;
|
||||
use App\Models\User;
|
||||
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
|
||||
use Illuminate\Foundation\Bus\DispatchesJobs;
|
||||
use Illuminate\Foundation\Validation\ValidatesRequests;
|
||||
use Illuminate\Routing\Controller as BaseController;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class AccountController extends BaseController
|
||||
{
|
||||
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
|
||||
|
||||
public function registerView() {
|
||||
return view("account.register");
|
||||
}
|
||||
|
||||
public function register(Request $request) {
|
||||
$validated = $request->validate([
|
||||
'username' => 'required|unique:users|unique:tenants,url|regex:/^[a-z0-9]{8,30}$/i',
|
||||
'email' => 'required|unique:users|email:rfc,dns',
|
||||
'password' => 'required|min:8|confirmed',
|
||||
]);
|
||||
|
||||
$user = new User();
|
||||
$user->password = Hash::make($validated["password"]);
|
||||
$user->username = $validated["username"];
|
||||
$user->email = $validated["email"];
|
||||
$user->saveOrFail();
|
||||
|
||||
$tenant = new Tenant();
|
||||
$tenant->name = $validated["username"];
|
||||
$tenant->url = $validated["username"];
|
||||
$tenant->template = "default";
|
||||
$tenant->owner = $user->id;
|
||||
$tenant->saveOrFail();
|
||||
return redirect("/login");
|
||||
}
|
||||
|
||||
public function loginView() {
|
||||
return view("account.login");
|
||||
}
|
||||
|
||||
public function login(Request $request) {
|
||||
$credentials = $request->only('username', 'password');
|
||||
if (Auth::attempt($credentials)) {
|
||||
$request->session()->regenerate();
|
||||
|
||||
return redirect("/d");
|
||||
}
|
||||
|
||||
return back()->withErrors([
|
||||
'username' => 'The provided credentials do not match our records.',
|
||||
]);
|
||||
}
|
||||
}
|
38
app/Http/Controllers/DashboardController.php
Normal file
|
@ -0,0 +1,38 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Storage;
|
||||
use App\Models\Traffic;
|
||||
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
|
||||
use Illuminate\Foundation\Bus\DispatchesJobs;
|
||||
use Illuminate\Foundation\Validation\ValidatesRequests;
|
||||
use Illuminate\Routing\Controller as BaseController;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class DashboardController extends BaseController
|
||||
{
|
||||
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
|
||||
|
||||
public function dashboardView() {
|
||||
$currentSize = DB::select("SELECT SUM(size) AS `size` FROM images LEFT JOIN galleries ON images.gallery = galleries.id WHERE galleries.tenant = 1;")[0]->size;
|
||||
$currentTraffic = DB::select("SELECT SUM(size) AS size FROM `go-mysql-admin`.access WHERE tenant = 1 AND created_at >= NOW() - INTERVAL 1 DAY;")[0]->size;
|
||||
$monthlyTraffic = DB::select("SELECT SUM(traffic) AS `traffic` FROM traffic WHERE `year` = 2021 AND `month` = 1 and tenant = 1;")[0]->traffic;
|
||||
$lastDaysTreffic = Traffic::getLastDays(7);
|
||||
$lastDaysSize = Storage::getLastDays(7);
|
||||
return view("dashboard.index", [
|
||||
"currentSize" => $this->human_filesize($currentSize),
|
||||
"currentTraffic" => $this->human_filesize($currentTraffic),
|
||||
"monthlyTraffic" => $this->human_filesize($monthlyTraffic),
|
||||
"lastDaysTreffic" => $lastDaysTreffic,
|
||||
"lastDaysSize" => $lastDaysSize
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
private function human_filesize($bytes, $decimals = 2) {
|
||||
$size = array('B','kB','MB','GB','TB','PB','EB','ZB','YB');
|
||||
$factor = floor((strlen($bytes) - 1) / 3);
|
||||
return sprintf("%.{$decimals}f", $bytes / pow(1024, $factor)) . @$size[$factor];
|
||||
}
|
||||
}
|
128
app/Http/Controllers/GalleryController.php
Normal file
|
@ -0,0 +1,128 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Gallery;
|
||||
use App\Models\Image;
|
||||
use App\Models\Tenant;
|
||||
use App\Rules\dateOrNull;
|
||||
use App\Rules\urlOrNull;
|
||||
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
|
||||
use Illuminate\Foundation\Bus\DispatchesJobs;
|
||||
use Illuminate\Foundation\Validation\ValidatesRequests;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller as BaseController;
|
||||
use Illuminate\Support\Facades\Redirect;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
|
||||
class GalleryController extends BaseController
|
||||
{
|
||||
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
|
||||
|
||||
public function listView() {
|
||||
$galleries = Gallery::query()->where("tenant", "=", session("current_tenant_id"))->orderByDesc("gallery_create_time")->orderByDesc("id")->get();
|
||||
$tenant = Tenant::query()->where("id", "=", session("current_tenant_id"))->firstOrFail();
|
||||
return view("gallery.index", ["galleries" => $galleries, "tenant" => $tenant]);
|
||||
}
|
||||
|
||||
public function newView() {
|
||||
return view("gallery.new");
|
||||
}
|
||||
|
||||
public function newGallery(Request $request) {
|
||||
$validated = $request->validate([
|
||||
'name' => 'required|max:255',
|
||||
'description' => 'max:15000000',
|
||||
'url' => [new urlOrNull()],
|
||||
'date' => [new dateOrNull()],
|
||||
]);
|
||||
|
||||
//Check if Gallery Date is in the feature
|
||||
if(!empty($validated["date"])) {
|
||||
$t = new \DateTime($validated["date"]);
|
||||
if($t > (new \DateTime())) {
|
||||
return Redirect::back()->withErrors(["date" => "Gallery date can't be in the feature"])->withInput($validated);
|
||||
}
|
||||
}
|
||||
|
||||
if(empty($validated["url"])) {
|
||||
$prepairdName = strtolower($validated["name"]);
|
||||
$prepairdName = str_replace(" ", "-", $prepairdName);
|
||||
$prepairdName = str_replace("ö", "oe", $prepairdName);
|
||||
$prepairdName = str_replace("ü", "üe", $prepairdName);
|
||||
$prepairdName = str_replace("ö", "oe", $prepairdName);
|
||||
$prepairdName = str_replace("ß", "ss", $prepairdName);
|
||||
|
||||
while (strlen($prepairdName) < 8) {
|
||||
$prepairdName = $prepairdName."0";
|
||||
}
|
||||
preg_match_all("@[a-z0-9\-]@", $prepairdName, $matches);
|
||||
$newUrl = "";
|
||||
foreach($matches[0] as $letter) {
|
||||
$newUrl .= $letter;
|
||||
}
|
||||
|
||||
$baseUrl = $newUrl;
|
||||
$i = 1;
|
||||
while (true) {
|
||||
$r = Gallery::getByTenantAndUrl(session("current_tenant_id"), $newUrl);
|
||||
if($r == null) {
|
||||
break;
|
||||
}
|
||||
$newUrl = $baseUrl.$i;
|
||||
$i++;
|
||||
}
|
||||
} else {
|
||||
$newUrl = $validated["url"];
|
||||
}
|
||||
|
||||
//Check if url is free
|
||||
$galleryTMP = Gallery::getByTenantAndUrl(session("current_tenant_id"), $newUrl);
|
||||
if(!empty($galleryTMP)) {
|
||||
return Redirect::back()->withErrors(["url" => "URL is already used"])->withInput($validated);
|
||||
}
|
||||
|
||||
$gallery = new Gallery();
|
||||
$gallery->name = $validated["name"];
|
||||
$gallery->url = $newUrl;
|
||||
$gallery->description = $validated["description"];
|
||||
$gallery->tenant = session("current_tenant_id");
|
||||
if(!empty($validated["date"])) {
|
||||
$gallery->gallery_create_time = $validated["date"];
|
||||
}
|
||||
$gallery->saveOrFail();
|
||||
|
||||
|
||||
|
||||
return \redirect("/g/".$gallery->url."/upload");
|
||||
}
|
||||
|
||||
public function imagesUploadView($name) {
|
||||
return view("gallery.upload");
|
||||
}
|
||||
|
||||
public function imageUpload($name, Request $request) {
|
||||
$gallery = Gallery::getByTenantAndUrl(session("current_tenant_id"), $name);
|
||||
$validated = $request->validate([
|
||||
'files.0' => 'required|image'
|
||||
]);
|
||||
$path = $validated["files"][0]->store("uploads/".session("current_tenant_id")."/".$name);
|
||||
|
||||
|
||||
$image = new Image();
|
||||
$image->path = $path;
|
||||
$image->driver = env('FILESYSTEM_DRIVER', 'local');
|
||||
$image->filename = $validated["files"][0]->getClientOriginalName();
|
||||
$image->gallery = $gallery->id;
|
||||
$image->size = $validated["files"][0]->getSize();
|
||||
$image->saveOrFail();
|
||||
|
||||
if(is_null($gallery->main_image)) {
|
||||
$gallery->main_image = $image->id;
|
||||
$gallery->saveOrFail();
|
||||
}
|
||||
|
||||
|
||||
return $name;
|
||||
}
|
||||
}
|
101
app/Http/Controllers/PublicController.php
Normal file
|
@ -0,0 +1,101 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Access;
|
||||
use App\Models\Gallery;
|
||||
use App\Models\Image;
|
||||
use App\Models\Tenant;
|
||||
use Gumlet\ImageResize;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
|
||||
use Illuminate\Foundation\Bus\DispatchesJobs;
|
||||
use Illuminate\Foundation\Validation\ValidatesRequests;
|
||||
use Illuminate\Routing\Controller as BaseController;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use phpDocumentor\Reflection\Types\Integer;
|
||||
|
||||
class PublicController extends BaseController
|
||||
{
|
||||
|
||||
const SIZE_SMALL = 300;
|
||||
const SIZE_MEDIUM = 600;
|
||||
const SIZE_BIG = 1200;
|
||||
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
|
||||
|
||||
public function listGalleriesView($name) {
|
||||
$tenant = Tenant::query()->where("url", "=", $name)->firstOrFail();
|
||||
$galleries = Gallery::query()->where("tenant", "=", $tenant->id)->get();
|
||||
return view("themes.tenant.default.list", ["galleries" => $galleries, "tenant" => $tenant]);
|
||||
}
|
||||
|
||||
public function listGalleryImagesView($tenant, $gallery) {
|
||||
$tenant = Tenant::query()->where("url", "=", $tenant)->firstOrFail();
|
||||
$gallery = Gallery::getByTenantAndUrl($tenant->id, $gallery);
|
||||
$images = Image::query()->where("gallery", "=", $gallery->id)->get();
|
||||
return view("themes.gallery.default.list", ["gallery" => $gallery, "tenant" => $tenant, "images" => $images]);
|
||||
}
|
||||
|
||||
public function returnImageFile($tenant, $gallery, $image, Request $request) {
|
||||
$tenant = Tenant::query()->where("url", "=", $tenant)->firstOrFail();
|
||||
$gallery = Gallery::getByTenantAndUrl($tenant->id, $gallery);
|
||||
$image = Image::query()->where("gallery", "=", $gallery->id)->where("id", "=", $image)->firstOrFail();
|
||||
$size = $request->input("size", "medium");
|
||||
|
||||
$cacheName = "cache_".$tenant->id."_".$gallery->id."_".$image->id;
|
||||
|
||||
//File exists in the right size
|
||||
if (Storage::disk('cache')->exists($cacheName."_".$size)) {
|
||||
Log::info("Get from Cache");
|
||||
|
||||
$this->addAccessLog($tenant->id, $gallery->id, $image->id, "Cache", Storage::disk('cache')->size($cacheName."_".$size));
|
||||
return Storage::disk('cache')->response($cacheName."_".$size);
|
||||
}
|
||||
|
||||
//ORginal File exists need to be resized
|
||||
$file = null;
|
||||
if (Storage::disk('cache')->exists($cacheName."_orginal")) {
|
||||
Log::info("Get orginal size from Cache");
|
||||
$file = Storage::disk("cache")->get($cacheName."_orginal");
|
||||
$this->addAccessLog($tenant->id, $gallery->id, $image->id, "Cache", $image->size);
|
||||
return Storage::disk('cache')->response($cacheName."_".$size);
|
||||
} else {
|
||||
Log::info("Get from S3");
|
||||
$this->addAccessLog($tenant->id, $gallery->id, $image->id, "Access", $image->size);
|
||||
$file = Storage::disk($image->driver)->get($image->path);
|
||||
Storage::disk("cache")->put($cacheName."_orginal", $file);
|
||||
}
|
||||
|
||||
//Resize
|
||||
$image = ImageResize::createFromString($file);
|
||||
$image->resizeToLongSide(self::SIZE_SMALL);
|
||||
Storage::disk("cache")->put($cacheName."_small", $image->getImageAsString());
|
||||
|
||||
$image = ImageResize::createFromString($file);
|
||||
$image->resizeToLongSide(self::SIZE_MEDIUM);
|
||||
Storage::disk("cache")->put($cacheName."_medium", $image->getImageAsString());
|
||||
|
||||
$image = ImageResize::createFromString($file);
|
||||
$image->resizeToLongSide(self::SIZE_BIG);
|
||||
Storage::disk("cache")->put($cacheName."_big", $image->getImageAsString());
|
||||
|
||||
|
||||
|
||||
return Storage::disk('cache')->response($cacheName."_orginal");
|
||||
}
|
||||
private function addAccessLog(int $tenant, int $gallery, int $image, string $typ, int $size) {
|
||||
$access = new Access();
|
||||
$access->year = date("Y");
|
||||
$access->month = date("m");
|
||||
$access->day = date("d");
|
||||
$access->hour = date("H");
|
||||
$access->image = $image;
|
||||
$access->gallery = $gallery;
|
||||
$access->tenant = $tenant;
|
||||
$access->typ = $typ;
|
||||
$access->size = $size;
|
||||
$access->saveOrFail();
|
||||
}
|
||||
}
|
55
app/Http/Controllers/TenantController.php
Normal file
|
@ -0,0 +1,55 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Tenant;
|
||||
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
|
||||
use Illuminate\Foundation\Bus\DispatchesJobs;
|
||||
use Illuminate\Foundation\Validation\ValidatesRequests;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller as BaseController;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Redirect;
|
||||
|
||||
class TenantController extends BaseController
|
||||
{
|
||||
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
|
||||
|
||||
public function newView() {
|
||||
return view("tenant.new");
|
||||
}
|
||||
|
||||
public function newTenant(Request $request) {
|
||||
|
||||
$validated = $request->validate([
|
||||
'name' => 'required|max:255',
|
||||
'url' => 'required|unique:tenants|regex:/^[a-z0-9]{8,30}$/i'
|
||||
]);
|
||||
|
||||
$tenant = new Tenant();
|
||||
$tenant->name = $validated["name"];
|
||||
$tenant->url = $validated["url"];
|
||||
$tenant->template = "default";
|
||||
$tenant->owner = Auth::user()->id;
|
||||
$tenant->saveOrFail();
|
||||
|
||||
$this->switchTenantById($tenant->id);
|
||||
|
||||
|
||||
return redirect("/d");
|
||||
}
|
||||
|
||||
public function switchTenant($url, Request $request) {
|
||||
$tenant = Tenant::getByUrl($url);
|
||||
if($tenant->owner == Auth::id()) {
|
||||
$this->switchTenantById($tenant->id);
|
||||
return Redirect::back();
|
||||
} else {
|
||||
return Redirect::back()->with(["msg" => "No Access to given Tenant"]);
|
||||
}
|
||||
}
|
||||
|
||||
private function switchTenantById($id) {
|
||||
session(["current_tenant_id" => $id]);
|
||||
}
|
||||
}
|
27
app/Http/Middleware/TenanMiddleware.php
Normal file
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use App\Models\Tenant;
|
||||
use Closure;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class TenanMiddleware
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure $next
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle($request, Closure $next)
|
||||
{
|
||||
if(Auth::check()) {
|
||||
view()->share('user_tenants', Tenant::getTenantPerUser(Auth::id()));
|
||||
}
|
||||
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
}
|
|
@ -12,6 +12,6 @@ class VerifyCsrfToken extends Middleware
|
|||
* @var array
|
||||
*/
|
||||
protected $except = [
|
||||
//
|
||||
'/g/*/upload'
|
||||
];
|
||||
}
|
||||
|
|
44
app/Models/Access.php
Normal file
|
@ -0,0 +1,44 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Contracts\Auth\MustVerifyEmail;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||
use Illuminate\Notifications\Notifiable;
|
||||
|
||||
class Access extends Authenticatable
|
||||
{
|
||||
use HasFactory, Notifiable;
|
||||
|
||||
protected $table = "access";
|
||||
public $timestamps = false;
|
||||
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $fillable = [
|
||||
'image',
|
||||
'typ',
|
||||
'size'
|
||||
];
|
||||
|
||||
/**
|
||||
* The attributes that should be hidden for arrays.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $hidden = [
|
||||
];
|
||||
|
||||
/**
|
||||
* The attributes that should be cast to native types.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $casts = [
|
||||
];
|
||||
|
||||
}
|
48
app/Models/Gallery.php
Normal file
|
@ -0,0 +1,48 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Contracts\Auth\MustVerifyEmail;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||
use Illuminate\Notifications\Notifiable;
|
||||
|
||||
class Gallery extends Authenticatable
|
||||
{
|
||||
use HasFactory, Notifiable;
|
||||
|
||||
protected $table = "galleries";
|
||||
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $fillable = [
|
||||
'name',
|
||||
'url',
|
||||
'description',
|
||||
'tenant',
|
||||
'gallery_create_time'
|
||||
];
|
||||
|
||||
/**
|
||||
* The attributes that should be hidden for arrays.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $hidden = [
|
||||
];
|
||||
|
||||
/**
|
||||
* The attributes that should be cast to native types.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $casts = [
|
||||
];
|
||||
|
||||
public static function getByTenantAndUrl($tenant_id, $url) {
|
||||
return Gallery::query()->where("tenant", "=", $tenant_id)->where("url", "=", $url)->first();
|
||||
}
|
||||
}
|
45
app/Models/Image.php
Normal file
|
@ -0,0 +1,45 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Contracts\Auth\MustVerifyEmail;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||
use Illuminate\Notifications\Notifiable;
|
||||
|
||||
class Image extends Authenticatable
|
||||
{
|
||||
use HasFactory, Notifiable;
|
||||
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $fillable = [
|
||||
'path',
|
||||
'driver',
|
||||
'filename',
|
||||
'gallery',
|
||||
'size',
|
||||
'uploaded_at',
|
||||
'deleted_at'
|
||||
];
|
||||
|
||||
/**
|
||||
* The attributes that should be hidden for arrays.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $hidden = [
|
||||
];
|
||||
|
||||
/**
|
||||
* The attributes that should be cast to native types.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $casts = [
|
||||
];
|
||||
|
||||
}
|
64
app/Models/Storage.php
Normal file
|
@ -0,0 +1,64 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Contracts\Auth\MustVerifyEmail;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||
use Illuminate\Notifications\Notifiable;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class Storage extends Authenticatable
|
||||
{
|
||||
use HasFactory, Notifiable;
|
||||
|
||||
protected $table = "storage";
|
||||
public $timestamps = true;
|
||||
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $fillable = [
|
||||
|
||||
];
|
||||
|
||||
/**
|
||||
* The attributes that should be hidden for arrays.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $hidden = [
|
||||
];
|
||||
|
||||
/**
|
||||
* The attributes that should be cast to native types.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $casts = [
|
||||
];
|
||||
|
||||
public static function getLastDays(int $days = 7) {
|
||||
$sql = "SELECT `date`, `tenant`, (sum(size)/24) AS size FROM `storage` WHERE `tenant` = 1 GROUP BY `date`, `tenant` ORDER BY `date` DESC LIMIT ".$days.";";
|
||||
$res = DB::select($sql);
|
||||
|
||||
$now = new \DateTime( $days." days ago", new \DateTimeZone('UTC'));
|
||||
$interval = new \DateInterval( 'P1D'); // 1 Day interval
|
||||
$period = new \DatePeriod( $now, $interval, $days); // 7 Days
|
||||
$result = [];
|
||||
foreach( $period as $day) {
|
||||
$key = $day->format('Y-m-d');
|
||||
$result[$day->format('Y-m-d')] = 0;
|
||||
foreach($res as $r) {
|
||||
if($r->date == $day->format('Y-m-d')) {
|
||||
$result[$day->format('Y-m-d')] = $r->size / 1000 / 1000;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
}
|
49
app/Models/Tenant.php
Normal file
|
@ -0,0 +1,49 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Contracts\Auth\MustVerifyEmail;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||
use Illuminate\Notifications\Notifiable;
|
||||
|
||||
class Tenant extends Authenticatable
|
||||
{
|
||||
use HasFactory, Notifiable;
|
||||
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $fillable = [
|
||||
'name',
|
||||
'url',
|
||||
'template',
|
||||
'owner'
|
||||
];
|
||||
|
||||
/**
|
||||
* The attributes that should be hidden for arrays.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $hidden = [
|
||||
];
|
||||
|
||||
/**
|
||||
* The attributes that should be cast to native types.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $casts = [
|
||||
];
|
||||
|
||||
public static function getTenantPerUser(int $user_id) {
|
||||
return Tenant::query()->where("owner", "=", $user_id)->get();
|
||||
}
|
||||
|
||||
public static function getByUrl(string $url) {
|
||||
return Tenant::query()->where("url", "=", $url)->firstOrFail();
|
||||
}
|
||||
}
|
70
app/Models/Traffic.php
Normal file
|
@ -0,0 +1,70 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Contracts\Auth\MustVerifyEmail;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||
use Illuminate\Notifications\Notifiable;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class Traffic extends Authenticatable
|
||||
{
|
||||
use HasFactory, Notifiable;
|
||||
|
||||
protected $table = "traffic";
|
||||
public $timestamps = true;
|
||||
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $fillable = [
|
||||
'tenant',
|
||||
'gallery',
|
||||
'year',
|
||||
'month',
|
||||
'day',
|
||||
'hour',
|
||||
'traffic'
|
||||
];
|
||||
|
||||
/**
|
||||
* The attributes that should be hidden for arrays.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $hidden = [
|
||||
];
|
||||
|
||||
/**
|
||||
* The attributes that should be cast to native types.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $casts = [
|
||||
];
|
||||
|
||||
public static function getLastDays(int $days = 7) {
|
||||
$sql = "SELECT year, month, day, SUM(traffic) AS `traffic` FROM traffic WHERE tenant = 1 GROUP BY year, month, day ORDER BY date DESC LIMIT ".$days.";";
|
||||
$res = DB::select($sql);
|
||||
|
||||
$now = new \DateTime( $days." days ago", new \DateTimeZone('UTC'));
|
||||
$interval = new \DateInterval( 'P1D'); // 1 Day interval
|
||||
$period = new \DatePeriod( $now, $interval, $days); // 7 Days
|
||||
$result = [];
|
||||
foreach( $period as $day) {
|
||||
$key = $day->format('Y-m-d');
|
||||
$result[$day->format('Y-m-d')] = 0;
|
||||
foreach($res as $r) {
|
||||
if($r->year == $day->format('Y') && $r->month == $day->format('m') && $r->day == $day->format('d')) {
|
||||
$result[$day->format('Y-m-d')] = $r->traffic / 1000 / 1000;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
}
|
|
@ -17,7 +17,7 @@ class User extends Authenticatable
|
|||
* @var array
|
||||
*/
|
||||
protected $fillable = [
|
||||
'name',
|
||||
'username',
|
||||
'email',
|
||||
'password',
|
||||
];
|
||||
|
|
44
app/Rules/dateOrNull.php
Normal file
|
@ -0,0 +1,44 @@
|
|||
<?php
|
||||
|
||||
namespace App\Rules;
|
||||
|
||||
use Illuminate\Contracts\Validation\Rule;
|
||||
|
||||
class dateOrNull implements Rule
|
||||
{
|
||||
/**
|
||||
* Create a new rule instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine if the validation rule passes.
|
||||
*
|
||||
* @param string $attribute
|
||||
* @param mixed $value
|
||||
* @return bool
|
||||
*/
|
||||
public function passes($attribute, $value)
|
||||
{
|
||||
if(empty($value)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return preg_match('/^\d{4}-\d{2}-\d{2}$/i', $value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation error message.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function message()
|
||||
{
|
||||
return 'Date must be yyyy-mm-dd';
|
||||
}
|
||||
}
|
44
app/Rules/urlOrNull.php
Normal file
|
@ -0,0 +1,44 @@
|
|||
<?php
|
||||
|
||||
namespace App\Rules;
|
||||
|
||||
use Illuminate\Contracts\Validation\Rule;
|
||||
|
||||
class urlOrNull implements Rule
|
||||
{
|
||||
/**
|
||||
* Create a new rule instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine if the validation rule passes.
|
||||
*
|
||||
* @param string $attribute
|
||||
* @param mixed $value
|
||||
* @return bool
|
||||
*/
|
||||
public function passes($attribute, $value)
|
||||
{
|
||||
if(empty($value)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return preg_match('/^[a-z0-9\-]{8,30}$/i', $value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation error message.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function message()
|
||||
{
|
||||
return 'URL is not valide';
|
||||
}
|
||||
}
|
|
@ -13,7 +13,10 @@
|
|||
"fruitcake/laravel-cors": "^2.0",
|
||||
"guzzlehttp/guzzle": "^7.0.1",
|
||||
"laravel/framework": "^8.12",
|
||||
"laravel/tinker": "^2.5"
|
||||
"laravel/tinker": "^2.5",
|
||||
"almasaeed2010/adminlte": "^3.0",
|
||||
"league/flysystem-aws-s3-v3": "~1.0",
|
||||
"gumlet/php-image-resize": "1.9.*"
|
||||
},
|
||||
"require-dev": {
|
||||
"facade/ignition": "^2.5",
|
||||
|
|
306
composer.lock
generated
|
@ -4,8 +4,51 @@
|
|||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "4a16c3c541bd99241cab1c21ce8e83ac",
|
||||
"content-hash": "8920d6f3aab6ae8aa7942dbb536e37b6",
|
||||
"packages": [
|
||||
{
|
||||
"name": "almasaeed2010/adminlte",
|
||||
"version": "v3.0.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/ColorlibHQ/AdminLTE.git",
|
||||
"reference": "6b8b69261f1aacbb4be037c934f3c3652e6dff27"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/ColorlibHQ/AdminLTE/zipball/6b8b69261f1aacbb4be037c934f3c3652e6dff27",
|
||||
"reference": "6b8b69261f1aacbb4be037c934f3c3652e6dff27",
|
||||
"shasum": ""
|
||||
},
|
||||
"type": "library",
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Colorlib"
|
||||
}
|
||||
],
|
||||
"description": "AdminLTE - admin control panel and dashboard that's based on Bootstrap 4",
|
||||
"homepage": "http://adminlte.io/",
|
||||
"keywords": [
|
||||
"JS",
|
||||
"admin",
|
||||
"back-end",
|
||||
"css",
|
||||
"less",
|
||||
"responsive",
|
||||
"template",
|
||||
"theme",
|
||||
"web"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/ColorlibHQ/AdminLTE/issues",
|
||||
"source": "https://github.com/ColorlibHQ/AdminLTE/tree/v3.0.5"
|
||||
},
|
||||
"time": "2020-05-19T20:41:11+00:00"
|
||||
},
|
||||
{
|
||||
"name": "asm89/stack-cors",
|
||||
"version": "v2.0.2",
|
||||
|
@ -62,6 +105,96 @@
|
|||
},
|
||||
"time": "2020-10-29T16:03:21+00:00"
|
||||
},
|
||||
{
|
||||
"name": "aws/aws-sdk-php",
|
||||
"version": "3.171.15",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/aws/aws-sdk-php.git",
|
||||
"reference": "26c7f2deb05110c62e38cc867658f1ef89123365"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/26c7f2deb05110c62e38cc867658f1ef89123365",
|
||||
"reference": "26c7f2deb05110c62e38cc867658f1ef89123365",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-json": "*",
|
||||
"ext-pcre": "*",
|
||||
"ext-simplexml": "*",
|
||||
"guzzlehttp/guzzle": "^5.3.3|^6.2.1|^7.0",
|
||||
"guzzlehttp/promises": "^1.0",
|
||||
"guzzlehttp/psr7": "^1.4.1",
|
||||
"mtdowling/jmespath.php": "^2.5",
|
||||
"php": ">=5.5"
|
||||
},
|
||||
"require-dev": {
|
||||
"andrewsville/php-token-reflection": "^1.4",
|
||||
"aws/aws-php-sns-message-validator": "~1.0",
|
||||
"behat/behat": "~3.0",
|
||||
"doctrine/cache": "~1.4",
|
||||
"ext-dom": "*",
|
||||
"ext-openssl": "*",
|
||||
"ext-pcntl": "*",
|
||||
"ext-sockets": "*",
|
||||
"nette/neon": "^2.3",
|
||||
"paragonie/random_compat": ">= 2",
|
||||
"phpunit/phpunit": "^4.8.35|^5.4.3",
|
||||
"psr/cache": "^1.0",
|
||||
"psr/simple-cache": "^1.0",
|
||||
"sebastian/comparator": "^1.2.3"
|
||||
},
|
||||
"suggest": {
|
||||
"aws/aws-php-sns-message-validator": "To validate incoming SNS notifications",
|
||||
"doctrine/cache": "To use the DoctrineCacheAdapter",
|
||||
"ext-curl": "To send requests using cURL",
|
||||
"ext-openssl": "Allows working with CloudFront private distributions and verifying received SNS messages",
|
||||
"ext-sockets": "To use client-side monitoring"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "3.0-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Aws\\": "src/"
|
||||
},
|
||||
"files": [
|
||||
"src/functions.php"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"Apache-2.0"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Amazon Web Services",
|
||||
"homepage": "http://aws.amazon.com"
|
||||
}
|
||||
],
|
||||
"description": "AWS SDK for PHP - Use Amazon Web Services in your PHP project",
|
||||
"homepage": "http://aws.amazon.com/sdkforphp",
|
||||
"keywords": [
|
||||
"amazon",
|
||||
"aws",
|
||||
"cloud",
|
||||
"dynamodb",
|
||||
"ec2",
|
||||
"glacier",
|
||||
"s3",
|
||||
"sdk"
|
||||
],
|
||||
"support": {
|
||||
"forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80",
|
||||
"issues": "https://github.com/aws/aws-sdk-php/issues",
|
||||
"source": "https://github.com/aws/aws-sdk-php/tree/3.171.15"
|
||||
},
|
||||
"time": "2021-01-11T19:28:59+00:00"
|
||||
},
|
||||
{
|
||||
"name": "brick/math",
|
||||
"version": "0.9.1",
|
||||
|
@ -660,6 +793,65 @@
|
|||
],
|
||||
"time": "2020-04-13T13:17:36+00:00"
|
||||
},
|
||||
{
|
||||
"name": "gumlet/php-image-resize",
|
||||
"version": "1.9.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/gumlet/php-image-resize.git",
|
||||
"reference": "06339a9c1b167acd58173db226f57957a6617547"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/gumlet/php-image-resize/zipball/06339a9c1b167acd58173db226f57957a6617547",
|
||||
"reference": "06339a9c1b167acd58173db226f57957a6617547",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-fileinfo": "*",
|
||||
"ext-gd": "*",
|
||||
"php": ">=5.5.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"apigen/apigen": "^4.1",
|
||||
"ext-exif": "*",
|
||||
"ext-gd": "*",
|
||||
"php-coveralls/php-coveralls": "^2.1",
|
||||
"phpunit/phpunit": "^4.8"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-exif": "Auto-rotate jpeg files"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Gumlet\\": "lib/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Aditya Patadia",
|
||||
"homepage": "http://aditya.patadia.org/"
|
||||
}
|
||||
],
|
||||
"description": "PHP class to re-size and scale images",
|
||||
"homepage": "https://github.com/gumlet/php-image-resize",
|
||||
"keywords": [
|
||||
"image",
|
||||
"php",
|
||||
"resize",
|
||||
"scale"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/gumlet/php-image-resize/issues",
|
||||
"source": "https://github.com/gumlet/php-image-resize/tree/master"
|
||||
},
|
||||
"time": "2019-01-01T13:53:00+00:00"
|
||||
},
|
||||
{
|
||||
"name": "guzzlehttp/guzzle",
|
||||
"version": "7.2.0",
|
||||
|
@ -1323,6 +1515,57 @@
|
|||
],
|
||||
"time": "2020-08-23T07:39:11+00:00"
|
||||
},
|
||||
{
|
||||
"name": "league/flysystem-aws-s3-v3",
|
||||
"version": "1.0.29",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git",
|
||||
"reference": "4e25cc0582a36a786c31115e419c6e40498f6972"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/4e25cc0582a36a786c31115e419c6e40498f6972",
|
||||
"reference": "4e25cc0582a36a786c31115e419c6e40498f6972",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"aws/aws-sdk-php": "^3.20.0",
|
||||
"league/flysystem": "^1.0.40",
|
||||
"php": ">=5.5.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"henrikbjorn/phpspec-code-coverage": "~1.0.1",
|
||||
"phpspec/phpspec": "^2.0.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.0-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"League\\Flysystem\\AwsS3v3\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Frank de Jonge",
|
||||
"email": "info@frenky.net"
|
||||
}
|
||||
],
|
||||
"description": "Flysystem adapter for the AWS S3 SDK v3.x",
|
||||
"support": {
|
||||
"issues": "https://github.com/thephpleague/flysystem-aws-s3-v3/issues",
|
||||
"source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/1.0.29"
|
||||
},
|
||||
"time": "2020-10-08T18:58:37+00:00"
|
||||
},
|
||||
{
|
||||
"name": "league/mime-type-detection",
|
||||
"version": "1.5.1",
|
||||
|
@ -1474,6 +1717,67 @@
|
|||
],
|
||||
"time": "2020-12-14T13:15:25+00:00"
|
||||
},
|
||||
{
|
||||
"name": "mtdowling/jmespath.php",
|
||||
"version": "2.6.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/jmespath/jmespath.php.git",
|
||||
"reference": "42dae2cbd13154083ca6d70099692fef8ca84bfb"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/42dae2cbd13154083ca6d70099692fef8ca84bfb",
|
||||
"reference": "42dae2cbd13154083ca6d70099692fef8ca84bfb",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^5.4 || ^7.0 || ^8.0",
|
||||
"symfony/polyfill-mbstring": "^1.17"
|
||||
},
|
||||
"require-dev": {
|
||||
"composer/xdebug-handler": "^1.4",
|
||||
"phpunit/phpunit": "^4.8.36 || ^7.5.15"
|
||||
},
|
||||
"bin": [
|
||||
"bin/jp.php"
|
||||
],
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "2.6-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"JmesPath\\": "src/"
|
||||
},
|
||||
"files": [
|
||||
"src/JmesPath.php"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Michael Dowling",
|
||||
"email": "mtdowling@gmail.com",
|
||||
"homepage": "https://github.com/mtdowling"
|
||||
}
|
||||
],
|
||||
"description": "Declaratively specify how to extract elements from a JSON document",
|
||||
"keywords": [
|
||||
"json",
|
||||
"jsonpath"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/jmespath/jmespath.php/issues",
|
||||
"source": "https://github.com/jmespath/jmespath.php/tree/2.6.0"
|
||||
},
|
||||
"time": "2020-07-31T21:01:56+00:00"
|
||||
},
|
||||
{
|
||||
"name": "nesbot/carbon",
|
||||
"version": "2.43.0",
|
||||
|
|
|
@ -35,11 +35,9 @@ return [
|
|||
'root' => storage_path('app'),
|
||||
],
|
||||
|
||||
'public' => [
|
||||
'cache' => [
|
||||
'driver' => 'local',
|
||||
'root' => storage_path('app/public'),
|
||||
'url' => env('APP_URL').'/storage',
|
||||
'visibility' => 'public',
|
||||
'root' => storage_path('cache'),
|
||||
],
|
||||
|
||||
's3' => [
|
||||
|
|
|
@ -15,12 +15,13 @@ class CreateUsersTable extends Migration
|
|||
{
|
||||
Schema::create('users', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('name');
|
||||
$table->timestamps();
|
||||
$table->string('username');
|
||||
$table->string('email')->unique();
|
||||
$table->timestamp('email_verified_at')->nullable();
|
||||
$table->string('password');
|
||||
$table->rememberToken();
|
||||
$table->timestamps();
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
|
|
37
database/migrations/2021_01_11_153100_tenant.php
Normal file
|
@ -0,0 +1,37 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class Tenant extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create('tenants', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->timestamps();
|
||||
$table->string('name');
|
||||
$table->string('url');
|
||||
$table->string("template");
|
||||
$table->unsignedBigInteger("owner");
|
||||
|
||||
$table->foreign('owner')->references('id')->on('users');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::dropIfExists('tenant');
|
||||
}
|
||||
}
|
40
database/migrations/2021_01_11_201731_gallery.php
Normal file
|
@ -0,0 +1,40 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class Gallery extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create('galleries', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->timestamps();
|
||||
$table->string('name');
|
||||
$table->string('url');
|
||||
$table->mediumText("description")->nullable();
|
||||
$table->unsignedBigInteger("tenant");
|
||||
$table->date("gallery_create_time")->default(\Illuminate\Support\Facades\DB::raw('CURRENT_DATE'));
|
||||
|
||||
|
||||
$table->foreign('tenant')->references('id')->on('tenants');
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::dropIfExists("galleries");
|
||||
}
|
||||
}
|
40
database/migrations/2021_01_11_221353_image.php
Normal file
|
@ -0,0 +1,40 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class Image extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create('images', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->timestamps();
|
||||
$table->string("path");
|
||||
$table->string("driver");
|
||||
$table->string("filename");
|
||||
$table->integer("size");
|
||||
$table->timestamp("uploaded_at")->default(\Illuminate\Support\Facades\DB::raw('CURRENT_TIMESTAMP'));
|
||||
$table->timestamp("deleted_at")->nullable();
|
||||
$table->unsignedBigInteger("gallery");
|
||||
|
||||
$table->foreign('gallery')->references('id')->on('galleries');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::dropIfExists("images");
|
||||
}
|
||||
}
|
32
database/migrations/2021_01_12_094048_gallery_main_image.php
Normal file
|
@ -0,0 +1,32 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class GalleryMainImage extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::table("galleries", function (Blueprint $table) {
|
||||
$table->unsignedBigInteger("main_image")->nullable()->default(null);
|
||||
$table->foreign('main_image')->references('id')->on('images');
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
44
database/migrations/2021_01_12_095330_access.php
Normal file
|
@ -0,0 +1,44 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class Access extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create("access", function(Blueprint $table) {
|
||||
$table->id();
|
||||
$table->timestamp("created_at")->default(\Illuminate\Support\Facades\DB::raw('CURRENT_TIMESTAMP'));
|
||||
$table->smallInteger("year");
|
||||
$table->tinyInteger("month");
|
||||
$table->tinyInteger("day");
|
||||
$table->tinyInteger("hour");
|
||||
$table->unsignedBigInteger("image");
|
||||
$table->unsignedBigInteger("gallery");
|
||||
$table->unsignedBigInteger("tenant");
|
||||
$table->enum("typ", ["Access", "Cache"]);
|
||||
$table->integer("size");
|
||||
|
||||
$table->foreign('image')->references('id')->on('images');
|
||||
$table->foreign('gallery')->references('id')->on('galleries');
|
||||
$table->foreign('tenant')->references('id')->on('tenants');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::dropIfExists("access");
|
||||
}
|
||||
}
|
43
database/migrations/2021_01_12_104042_traffic.php
Normal file
|
@ -0,0 +1,43 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class Traffic extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create("traffic", function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->timestamps();
|
||||
$table->smallInteger("year");
|
||||
$table->tinyInteger("month");
|
||||
$table->tinyInteger("day");
|
||||
$table->tinyInteger("hour");
|
||||
$table->date("date");
|
||||
$table->unsignedBigInteger("tenant");
|
||||
$table->unsignedBigInteger("gallery");
|
||||
$table->bigInteger("traffic");
|
||||
|
||||
$table->foreign('gallery')->references('id')->on('galleries');
|
||||
$table->foreign('tenant')->references('id')->on('tenants');
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
43
database/migrations/2021_01_12_134145_storage_log.php
Normal file
|
@ -0,0 +1,43 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class StorageLog extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create("storage", function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->timestamps();
|
||||
$table->smallInteger("year");
|
||||
$table->tinyInteger("month");
|
||||
$table->tinyInteger("day");
|
||||
$table->tinyInteger("hour");
|
||||
$table->date("date");
|
||||
$table->unsignedBigInteger("tenant");
|
||||
$table->unsignedBigInteger("gallery");
|
||||
$table->bigInteger("size");
|
||||
|
||||
$table->foreign('gallery')->references('id')->on('galleries');
|
||||
$table->foreign('tenant')->references('id')->on('tenants');
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::dropIfExists("storage");
|
||||
}
|
||||
}
|
1
public/assets
Symbolic link
|
@ -0,0 +1 @@
|
|||
../resources/assets
|
1
public/css
Symbolic link
|
@ -0,0 +1 @@
|
|||
../resources/css
|
1
public/dist
Symbolic link
|
@ -0,0 +1 @@
|
|||
../vendor/almasaeed2010/adminlte/dist
|
1
public/images
Symbolic link
|
@ -0,0 +1 @@
|
|||
../resources/images
|
1
public/js
Symbolic link
|
@ -0,0 +1 @@
|
|||
../resources/js
|
1
public/plugins
Symbolic link
|
@ -0,0 +1 @@
|
|||
../vendor/almasaeed2010/adminlte/plugins
|
135
resources/assets/fonts/jquery.filer-icons/jquery-filer.css
vendored
Normal file
BIN
resources/assets/fonts/jquery.filer-icons/jquery-filer.eot
Normal file
283
resources/assets/fonts/jquery.filer-icons/jquery-filer.svg
Normal file
|
@ -0,0 +1,283 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||
<!--
|
||||
2015-1-20: Created.
|
||||
-->
|
||||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<metadata>
|
||||
Created by FontForge 20120731 at Tue Jan 20 14:13:11 2015
|
||||
By Iulian Galciuc,,,
|
||||
Created by Iulian Galciuc,,, with FontForge 2.0 (http://fontforge.sf.net)
|
||||
</metadata>
|
||||
<defs>
|
||||
<font id="jquery-filer" horiz-adv-x="512" >
|
||||
<font-face
|
||||
font-family="jquery-filer"
|
||||
font-weight="500"
|
||||
font-stretch="normal"
|
||||
units-per-em="512"
|
||||
panose-1="2 0 6 9 0 0 0 0 0 0"
|
||||
ascent="448"
|
||||
descent="-64"
|
||||
bbox="-0.361328 -64.8438 512.331 448.844"
|
||||
underline-thickness="25.6"
|
||||
underline-position="-51.2"
|
||||
unicode-range="U+F2F6-F344"
|
||||
/>
|
||||
<missing-glyph />
|
||||
<glyph glyph-name="uniF32B" unicode=""
|
||||
d="M480 192c0 -29 -10 -55.7917 -30 -80.375c-20 -24.5833 -47.1667 -44 -81.5 -58.25s-71.8333 -21.375 -112.5 -21.375c-11.6667 0 -23.75 0.666668 -36.25 2c-33 -29.1667 -71.3333 -49.3333 -115 -60.5c-8.16666 -2.33333 -17.6667 -4.16667 -28.5 -5.5
|
||||
c-2.83334 -0.333454 -5.375 0.416546 -7.625 2.25c-2.25 1.83333 -3.70834 4.25 -4.375 7.25v0.25c-0.5 0.666666 -0.541668 1.66667 -0.125 3c0.416664 1.3333 0.583336 2.16663 0.5 2.5c-0.0833359 0.333303 0.291664 1.12497 1.125 2.375l1.5 2.25l1.75 2.125l2 2.25
|
||||
c1.16666 1.33333 3.75 4.20833 7.75 8.625s6.875 7.58333 8.625 9.5s4.33334 5.20833 7.75 9.875s6.125 8.91667 8.125 12.75c2 3.83333 4.25 8.75 6.75 14.75s4.66666 12.3333 6.5 19c-26.1667 14.8334 -46.7917 33.1667 -61.875 55
|
||||
c-15.0833 21.8333 -22.625 45.25 -22.625 70.25c0 21.6667 5.91667 42.375 17.75 62.125s27.75 36.7917 47.75 51.125c20.0001 14.3333 43.8334 25.7083 71.5 34.125c27.6667 8.41666 56.6667 12.625 87 12.625c40.6667 0 78.1667 -7.125 112.5 -21.375
|
||||
s61.5 -33.6667 81.5 -58.25c20 -24.5833 30 -51.375 30 -80.375z" />
|
||||
<glyph glyph-name="uniF30C" unicode=""
|
||||
d="M385 232.5c0 4.66667 -1.5 8.5 -4.5 11.5l-22.75 22.5c-3.16666 3.16666 -6.91666 4.75 -11.25 4.75s-8.08334 -1.58334 -11.25 -4.75l-102 -101.75l-56.5 56.5c-3.16667 3.16667 -6.91667 4.75 -11.25 4.75s-8.08333 -1.58333 -11.25 -4.75l-22.75 -22.5
|
||||
c-3 -3 -4.5 -6.83333 -4.5 -11.5c0 -4.5 1.5 -8.25 4.5 -11.25l90.5 -90.5c3.16667 -3.16666 6.91667 -4.75 11.25 -4.75c4.5 0 8.33333 1.58334 11.5 4.75l135.75 135.75c3 3 4.5 6.75 4.5 11.25zM448 192c0 -34.8333 -8.58334 -66.9583 -25.75 -96.375
|
||||
c-17.1674 -29.4167 -40.4591 -52.7083 -69.875 -69.875c-29.4167 -17.1667 -61.5417 -25.75 -96.375 -25.75c-34.8333 0 -66.9583 8.58333 -96.375 25.75c-29.4167 17.1667 -52.7083 40.4583 -69.875 69.875c-17.1667 29.4167 -25.75 61.5417 -25.75 96.375
|
||||
c0 34.8333 8.58334 66.9583 25.75 96.375s40.4583 52.7083 69.875 69.875s61.5417 25.75 96.375 25.75c34.8333 0 66.9583 -8.58334 96.375 -25.75c29.4167 -17.1673 52.7083 -40.459 69.875 -69.875c17.1667 -29.4168 25.75 -61.5418 25.75 -96.375z" />
|
||||
<glyph glyph-name="uniF33F" unicode=""
|
||||
d="M288 72v48c0 2.33334 -0.75 4.25 -2.25 5.75s-3.41666 2.25 -5.75 2.25h-48c-2.33333 0 -4.25 -0.75 -5.75 -2.25s-2.25 -3.41666 -2.25 -5.75v-48c0 -2.33334 0.75 -4.25 2.25 -5.75s3.41667 -2.25 5.75 -2.25h48c2.33334 0 4.25 0.75 5.75 2.25s2.25 3.41666 2.25 5.75
|
||||
zM352 240c0 14.6667 -4.625 28.25 -13.875 40.75s-20.7917 22.1667 -34.625 29s-28 10.25 -42.5 10.25c-40.5 0 -71.4167 -17.75 -92.75 -53.25c-2.5 -4 -1.83333 -7.5 2 -10.5l33 -25c1.16667 -1 2.75 -1.5 4.75 -1.5c2.66667 0 4.75 1 6.25 3
|
||||
c8.83333 11.3333 16 19 21.5 23c5.66713 4 12.8338 6 21.5 6c8 0 15.125 -2.16666 21.375 -6.5c6.25 -4.33333 9.375 -9.25 9.375 -14.75c0 -6.33356 -1.66666 -11.4169 -5 -15.25c-3.33334 -3.83333 -9 -7.58333 -17 -11.25
|
||||
c-10.5 -4.66667 -20.125 -11.875 -28.875 -21.625s-13.125 -20.2083 -13.125 -31.375v-9c0 -2.33333 0.75 -4.25 2.25 -5.75s3.41667 -2.25 5.75 -2.25h48c2.33334 0 4.25 0.75 5.75 2.25s2.25 3.41667 2.25 5.75c0 3.16667 1.79166 7.29167 5.375 12.375
|
||||
s8.125 9.20833 13.625 12.375c5.33572 3 9.41907 5.375 12.25 7.125c2.83456 1.75 6.66791 4.66667 11.5 8.75c4.83591 4.08333 8.54425 8.08333 11.125 12c2.58859 3.91747 4.92194 8.95914 7 15.125c2.08334 6.16667 3.125 12.9167 3.125 20.25zM448 192
|
||||
c0 -34.8333 -8.58334 -66.9583 -25.75 -96.375c-17.1674 -29.4167 -40.4591 -52.7083 -69.875 -69.875c-29.4167 -17.1667 -61.5417 -25.75 -96.375 -25.75c-34.8333 0 -66.9583 8.58333 -96.375 25.75c-29.4167 17.1667 -52.7083 40.4583 -69.875 69.875
|
||||
c-17.1667 29.4167 -25.75 61.5417 -25.75 96.375c0 34.8333 8.58334 66.9583 25.75 96.375s40.4583 52.7083 69.875 69.875s61.5417 25.75 96.375 25.75c34.8333 0 66.9583 -8.58334 96.375 -25.75c29.4167 -17.1673 52.7083 -40.459 69.875 -69.875
|
||||
c17.1667 -29.4168 25.75 -61.5418 25.75 -96.375z" />
|
||||
<glyph glyph-name="uniF2F8" unicode=""
|
||||
d="M340.8 365v0c59.1006 0 107.2 -48.2998 107.2 -107.7c0 -29.5996 -11.7998 -57.2002 -32.7998 -77.5l-148.3 -149.8l-10.9004 -11l-10.9004 11l-151.199 152.7c-19.3008 20.2002 -29.9004 46.7002 -29.9004 74.5996c0 59.4004 48.0996 107.7 107.2 107.7
|
||||
c33.7998 0 64.7998 -15.7998 84.7998 -41.7998c20 26 51 41.7998 84.7998 41.7998z" />
|
||||
<glyph glyph-name="uniF30D" unicode=""
|
||||
d="M256 320c-34 0 -65.7917 -5.79166 -95.375 -17.375c-29.5834 -11.5833 -53.0834 -27.2083 -70.5 -46.875c-17.4167 -19.6667 -26.125 -40.9167 -26.125 -63.75c0 -18.6667 5.95834 -36.4583 17.875 -53.375c11.9167 -16.9167 28.7083 -31.5417 50.375 -43.875
|
||||
l21.75 -12.5l-6.75 -24c-4 -15.1667 -9.83333 -29.5 -17.5 -43c25.3333 10.5 48.25 24.75 68.75 42.75l10.75 9.5l14.25 -1.5c11.5 -1.33334 22.3333 -2 32.5 -2c34 -3.8147e-06 65.7917 5.79166 95.375 17.375s53.0833 27.2083 70.5 46.875
|
||||
c17.4167 19.6667 26.125 40.9167 26.125 63.75s-8.70834 44.0833 -26.125 63.75c-17.4167 19.6667 -40.9167 35.2917 -70.5 46.875s-61.375 17.375 -95.375 17.375zM480 192c0 -29 -10 -55.7917 -30 -80.375c-20 -24.5833 -47.1667 -44 -81.5 -58.25
|
||||
s-71.8333 -21.375 -112.5 -21.375c-11.6667 0 -23.75 0.666668 -36.25 2c-33 -29.1667 -71.3333 -49.3333 -115 -60.5c-8.16666 -2.33333 -17.6667 -4.16667 -28.5 -5.5h-1.25c-2.5 0 -4.75 0.875 -6.75 2.625s-3.33334 4.04167 -4 6.875v0.25
|
||||
c-0.5 0.666666 -0.541668 1.66667 -0.125 3c0.416664 1.3333 0.583336 2.16663 0.5 2.5c-0.0833359 0.333303 0.291664 1.12497 1.125 2.375l1.5 2.25l1.75 2.125l2 2.25c1.16666 1.33333 3.75 4.20833 7.75 8.625s6.875 7.58333 8.625 9.5s4.33334 5.20833 7.75 9.875
|
||||
s6.125 8.91667 8.125 12.75c2 3.83333 4.25 8.75 6.75 14.75s4.66666 12.3333 6.5 19c-26.1667 14.8334 -46.7917 33.1667 -61.875 55c-15.0833 21.8333 -22.625 45.25 -22.625 70.25c0 29 10 55.7917 30 80.375c20 24.5833 47.1667 44 81.5 58.25
|
||||
s71.8333 21.375 112.5 21.375c40.6667 0 78.1667 -7.125 112.5 -21.375s61.5 -33.6667 81.5 -58.25c20 -24.5833 30 -51.375 30 -80.375z" />
|
||||
<glyph glyph-name="uniF330" unicode=""
|
||||
d="M384 184v-80c0 -19.8333 -7.04166 -36.7917 -21.125 -50.875s-31.0417 -21.125 -50.875 -21.125h-208c-19.8333 0 -36.7917 7.04167 -50.875 21.125c-14.0833 14.0834 -21.125 31.0417 -21.125 50.875v208c0 19.834 7.04167 36.7923 21.125 50.875
|
||||
c14.0834 14.0833 31.0417 21.125 50.875 21.125h176c2.33334 0 4.25 -0.75 5.75 -2.25s2.25 -3.41666 2.25 -5.75v-16c0 -2.33334 -0.75 -4.25 -2.25 -5.75s-3.41666 -2.25 -5.75 -2.25h-176c-11 0 -20.4167 -3.91666 -28.25 -11.75s-11.75 -17.25 -11.75 -28.25v-208
|
||||
c-3.8147e-06 -11 3.91666 -20.4167 11.75 -28.25s17.25 -11.75 28.25 -11.75h208c11 -3.8147e-06 20.4167 3.91666 28.25 11.75s11.75 17.25 11.75 28.25v80c0 2.33333 0.75 4.25 2.25 5.75s3.41666 2.25 5.75 2.25h16c2.33334 0 4.25 -0.75 5.75 -2.25
|
||||
s2.25 -3.41667 2.25 -5.75zM480 400v-128c0 -4.33334 -1.58334 -8.08334 -4.75 -11.25c-3.16666 -3.16669 -6.91666 -4.75002 -11.25 -4.75c-4.33334 0 -8.08334 1.58334 -11.25 4.75l-44 44l-163 -163c-1.66667 -1.66667 -3.58333 -2.5 -5.75 -2.5
|
||||
s-4.08333 0.833328 -5.75 2.5l-28.5 28.5c-1.66667 1.66798 -2.5 3.58466 -2.5 5.75c0 2.16803 0.833328 4.0847 2.5 5.75l163 163l-44 44c-3.16666 3.16666 -4.75 6.91666 -4.75 11.25s1.58334 8.08334 4.75 11.25s6.91666 4.75 11.25 4.75h128
|
||||
c4.33334 0 8.08334 -1.58334 11.25 -4.75s4.75 -6.91666 4.75 -11.25z" />
|
||||
<glyph glyph-name="uniF342" unicode=""
|
||||
d="M0 237.177v210.823h210.823v-210.823h-210.823zM30.1172 417.883v-150.589h150.589v150.589h-150.589zM301.177 448h210.823v-210.823h-210.823v210.823zM481.883 267.294v150.589h-150.589v-150.589h150.589zM0 -64v210.823h210.823v-210.823h-210.823zM30.1172 116.706
|
||||
v-150.589h150.589v150.589h-150.589zM301.177 -64v210.823h210.823v-210.823h-210.823zM331.294 116.706v-150.589h150.589v150.589h-150.589z" />
|
||||
<glyph glyph-name="uniF31F" unicode=""
|
||||
d="M291.147 448l160.617 -159.864v-352.136h-391.529v512h230.912zM301.177 395.535v-98.123h98.5752zM90.3525 -33.8828h331.295v301.177h-150.589v150.589h-180.706v-451.766zM273.581 291.056v108.06h58.3184v-108.06h-58.3184zM289.876 286.768v46.3115h112.349
|
||||
v-46.3115h-112.349zM320.75 317.642v51.457h44.5967v-51.457h-44.5967z" />
|
||||
<glyph glyph-name="uniF30B" unicode=""
|
||||
d="M421.647 387.765h90.3525v-451.765h-512v451.765h90.3525v30.1182h90.3535v-30.1182h150.588v30.1182h90.3535v-30.1182zM361.412 387.765v-60.2354h30.1172v60.2354h-30.1172zM120.471 387.765v-60.2354h30.1172v60.2354h-30.1172zM481.883 -33.8828v268.68h-451.766
|
||||
v-268.68h451.766zM30.1172 264.915h451.766v92.7324h-60.2354v-60.2354h-90.3535v60.2354h-150.588v-60.2354h-90.3535v60.2354h-60.2354v-92.7324z" />
|
||||
<glyph glyph-name="uniF307" unicode=""
|
||||
d="M512 -48.5801l0.331055 -15.4199h-512.692l0.361328 15.4199c1.89746 81.8604 84.9014 151.673 199.288 169.412v38.6406c-16.6846 14.9082 -28.1895 38.8818 -35.5088 59.1816c-8.94434 4.90918 -16.9863 14.3662 -22.5576 26.8652
|
||||
c-9.78809 22.0459 -7.40918 43.2783 5.39062 52.3135c-0.511719 6.62598 -0.782227 13.0713 -0.782227 19.2451l-0.0908203 11.1143c-0.391602 34.2734 -0.842773 76.9199 50.7178 81.5283c0 0.150391 1.3252 2.68066 2.31934 4.54785
|
||||
c7.95117 15.5107 19.8174 32.165 59.3623 33.5811l7.95117 0.150391c56.9521 0 95.6533 -21.1123 108.965 -59.4521c3.70508 -10.6621 0 -20.1191 -3.19238 -28.4609c-3.88477 -9.93945 -8.22168 -21.2334 -5.84277 -41.2012
|
||||
c0.933594 -7.28809 0.391602 -14.6074 -0.451172 -21.7754c10.6006 -9.21582 13.3721 -28.3408 6.2041 -49.0615c-5.12012 -14.9688 -13.915 -26.1123 -23.9141 -31.1113c-6.89648 -18.8535 -17.4375 -40.96 -32.2559 -55.2061v-41.3818
|
||||
c112.73 -18.3711 194.5 -88.0029 196.397 -168.93zM31.7441 -33.8828v-0.0292969h448.542c-11.7158 62.3135 -84.9014 114.176 -181.609 126.253l-13.1914 1.65625v82.1006l5.96289 4.51758c10.8125 8.16211 21.8652 27.5576 30.3887 53.248l3.43359 10.3008h10.8428
|
||||
c-0.151367 0.481445 4.21582 4.96875 7.1377 13.6729c2.13867 6.11426 2.5 11.084 2.25879 14.2158l-13.2822 -1.44531l2.68066 24.2441c0.994141 7.55957 1.92773 14.668 1.20508 20.3301c-3.31348 27.5273 3.28223 44.5439 7.64941 55.8076
|
||||
c1.14453 2.95117 2.71094 6.9873 2.71094 8.28223c-11.7461 33.5215 -55.417 38.6113 -80.3838 38.6113l-6.83691 -0.121094c-25.2988 -0.933594 -29.2139 -8.49316 -33.7324 -17.2871c-3.73438 -7.22852 -9.96875 -19.3057 -26.3828 -20.751
|
||||
c-21.7451 -1.95801 -23.7324 -10.7822 -23.2803 -51.1699l0.0898438 -11.4453c0 -9.00488 0.663086 -18.6729 1.92773 -28.6113l2.89062 -22.5586l-15.3594 4.30762c0.241211 -3.10254 1.11426 -7.43945 3.37305 -12.499c3.6748 -8.28223 8.34277 -12.3184 9.93848 -12.8906
|
||||
l8.85449 -1.53613l2.5 -8.46289c9.00586 -27.2266 20.9922 -47.5557 32.8281 -55.748l6.50586 -4.51758v-80.293l-13.2822 -1.56641c-98.2734 -11.5352 -172.574 -63.5488 -184.38 -126.615z" />
|
||||
<glyph glyph-name="uniF2F6" unicode=""
|
||||
d="M449.75 274.5c0 -6.6687 -2.33334 -12.3354 -7 -17l-181 -181l-34 -34c-4.66667 -4.66667 -10.3333 -7 -17 -7s-12.3333 2.33333 -17 7l-34 34l-90.5 90.5c-4.66679 4.66733 -7.00012 10.334 -7 17c0 6.6674 2.33334 12.3341 7 17l34 34c4.66666 4.66667 10.3333 7 17 7
|
||||
s12.3333 -2.33333 17 -7l73.5 -73.75l164 164.25c4.66666 4.66666 10.3333 7 17 7s12.3333 -2.33334 17 -7l34 -34c4.66666 -4.66776 7 -10.3344 7 -17z" />
|
||||
<glyph glyph-name="uniF32D" unicode=""
|
||||
d="M304 104v-56c0 -4.33333 -1.58334 -8.08333 -4.75 -11.25s-6.91666 -4.75 -11.25 -4.75h-64c-4.33333 -1.90735e-06 -8.08333 1.58333 -11.25 4.75s-4.75 6.91667 -4.75 11.25v56c0 4.33334 1.58333 8.08334 4.75 11.25s6.91667 4.75 11.25 4.75h64
|
||||
c4.33334 0 8.08334 -1.58334 11.25 -4.75s4.75 -6.91666 4.75 -11.25zM311.5 368l-7 -192c-0.166656 -4.33333 -1.875 -8.08333 -5.125 -11.25s-7.04166 -4.75 -11.375 -4.75h-64c-4.33333 0 -8.125 1.58333 -11.375 4.75s-4.95833 6.91667 -5.125 11.25l-7 192
|
||||
c-0.166672 4.33334 1.29167 8.08334 4.375 11.25s6.79167 4.75 11.125 4.75h80c4.33563 0 8.04398 -1.58334 11.125 -4.75c3.08807 -3.16666 4.54642 -6.91666 4.375 -11.25z" />
|
||||
<glyph glyph-name="uniF33D" unicode=""
|
||||
d="M481.883 161.883c0 -124.567 -101.316 -225.883 -225.883 -225.883s-225.883 101.315 -225.883 225.883c0 105.352 74.5713 198.144 177.333 220.642l6.44531 -29.4248c-89.0273 -19.4863 -153.66 -99.9004 -153.66 -191.217
|
||||
c0 -107.942 87.8232 -195.766 195.765 -195.766s195.765 87.8232 195.765 195.766c0 91.1953 -64.542 171.61 -153.479 191.187l6.47559 29.4248c102.641 -22.6182 177.122 -115.381 177.122 -220.611zM271.059 448v-301.177h-30.1172v301.177h30.1172z" />
|
||||
<glyph glyph-name="uniF2F7" unicode=""
|
||||
d="M448 176c-25.3333 39.3333 -57.0833 68.75 -95.25 88.25c10.1667 -17.3333 15.25 -36.0833 15.25 -56.25c0 -30.8333 -10.9583 -57.2083 -32.875 -79.125c-21.9167 -21.9167 -48.2917 -32.875 -79.125 -32.875c-30.8333 0 -57.2083 10.9583 -79.125 32.875
|
||||
c-21.9167 21.9167 -32.875 48.2917 -32.875 79.125c0 20.1667 5.08333 38.9167 15.25 56.25c-38.1667 -19.5 -69.9167 -48.9167 -95.25 -88.25c22.1667 -34.1667 49.9583 -61.375 83.375 -81.625s69.625 -30.375 108.625 -30.375s75.2083 10.125 108.625 30.375
|
||||
c33.4167 20.2501 61.2083 47.4584 83.375 81.625zM268 272c0 3.33755 -1.16666 6.1709 -3.5 8.5c-2.33334 2.33334 -5.16666 3.5 -8.5 3.5c-20.8333 0 -38.7083 -7.45834 -53.625 -22.375c-14.9167 -14.9167 -22.375 -32.7917 -22.375 -53.625
|
||||
c0 -3.33488 1.16667 -6.16821 3.5 -8.5c2.33333 -2.33333 5.16667 -3.5 8.5 -3.5s6.16667 1.16667 8.5 3.5s3.5 5.16667 3.5 8.5c0 14.3333 5.08333 26.5833 15.25 36.75s22.4167 15.25 36.75 15.25c3.33731 0 6.17065 1.16666 8.5 3.5c2.33334 2.3374 3.5 5.17075 3.5 8.5z
|
||||
M480 176c0 -5.66667 -1.66666 -11.4167 -5 -17.25c-23.3333 -38.3333 -54.7083 -69.0417 -94.125 -92.125s-81.0417 -34.625 -124.875 -34.625c-43.8333 0 -85.4583 11.5833 -124.875 34.75s-70.7917 53.8333 -94.125 92c-3.33334 5.83333 -5 11.5833 -5 17.25
|
||||
c0 5.66667 1.66667 11.4167 5 17.25c23.3334 38.1667 54.7084 68.8333 94.125 92c39.4167 23.1667 81.0417 34.75 124.875 34.75c43.8333 0 85.4583 -11.5833 124.875 -34.75s70.7917 -53.8333 94.125 -92c3.33334 -5.83333 5 -11.5833 5 -17.25z" />
|
||||
<glyph glyph-name="uniF344" unicode=""
|
||||
d="M291.147 448l160.617 -159.864v-352.136h-391.529v512h230.912zM301.177 395.535v-98.123h98.5752zM90.3525 -33.8828h331.295v301.177h-150.589v150.589h-60.2354v-30.1182h-30.1172v30.1182h-90.3535v-451.766zM150.588 207.059h30.1182v-30.1172h-30.1182v30.1172z
|
||||
M180.706 207.059v30.1182h30.1172v-30.1182h-30.1172zM180.706 267.294v30.1182h30.1172v-30.1182h-30.1172zM150.588 267.294h30.1182v-30.1172h-30.1182v30.1172zM150.588 327.529h30.1182v-30.1172h-30.1182v30.1172zM180.706 327.529v30.1182h30.1172v-30.1182h-30.1172
|
||||
zM150.588 387.765h30.1182v-30.1172h-30.1182v30.1172zM180.706 165.226c33.2197 0 60.2354 -27.0156 60.2354 -60.2354c0 -9.93848 -2.53027 -19.6064 -7.5293 -28.7324c-9.42676 -17.1973 -26.6543 -28.7627 -46.1104 -30.9004
|
||||
c-2.95117 -0.391602 -4.72852 -0.602539 -6.5957 -0.602539c-33.2197 0 -60.2354 27.0156 -60.2354 60.2354s27.0156 60.2354 60.2354 60.2354zM206.999 90.6846c2.5293 4.66797 3.82422 9.48633 3.82422 14.2754c0 16.5947 -13.5225 30.1182 -30.1172 30.1182
|
||||
s-30.1182 -13.5234 -30.1182 -30.1182s13.4932 -30.1172 30.0879 -30.1172l3.37305 0.420898c9.66797 1.05469 18.251 6.83691 22.9502 15.4209z" />
|
||||
<glyph glyph-name="uniF32E" unicode=""
|
||||
d="M256 384c34.8333 0 66.9583 -8.58334 96.375 -25.75c29.4167 -17.1673 52.7083 -40.459 69.875 -69.875c17.1667 -29.4168 25.75 -61.5418 25.75 -96.375c0 -34.8333 -8.58334 -66.9583 -25.75 -96.375c-17.1674 -29.4167 -40.4591 -52.7083 -69.875 -69.875
|
||||
c-29.4167 -17.1667 -61.5417 -25.75 -96.375 -25.75c-34.8333 0 -66.9583 8.58333 -96.375 25.75c-29.4167 17.1667 -52.7083 40.4583 -69.875 69.875c-17.1667 29.4167 -25.75 61.5417 -25.75 96.375c0 34.8333 8.58334 66.9583 25.75 96.375
|
||||
s40.4583 52.7083 69.875 69.875s61.5417 25.75 96.375 25.75zM288 72.25v47.5c0 2.3338 -0.75 4.29214 -2.25 5.875c-1.5 1.58334 -3.33334 2.375 -5.5 2.375h-48c-2.16667 0 -4.08333 -0.833336 -5.75 -2.5c-1.66667 -1.66714 -2.5 -3.5838 -2.5 -5.75v-47.5
|
||||
c0 -2.16693 0.833328 -4.0836 2.5 -5.75c1.66841 -1.66667 3.58508 -2.5 5.75 -2.5h48c2.16666 -3.8147e-06 4 0.791664 5.5 2.375c1.5 1.5836 2.25 3.54193 2.25 5.875zM287.5 158.25l4.5 155.25c0 2 -0.833344 3.5 -2.5 4.5c-1.66666 1.33334 -3.66666 2 -6 2h-55
|
||||
c-2.33333 0 -4.33333 -0.666656 -6 -2c-1.66667 -1 -2.5 -2.5 -2.5 -4.5l4.25 -155.25c0 -1.66667 0.833328 -3.125 2.5 -4.375s3.66667 -1.875 6 -1.875h46.25c2.33765 0 4.29599 0.625 5.875 1.875c1.58334 1.25 2.45834 2.70833 2.625 4.375z" />
|
||||
<glyph glyph-name="uniF33E" unicode=""
|
||||
d="M304 102v-60c0 -2.66667 -1 -5 -3 -7s-4.33334 -3 -7 -3h-60c-2.66667 0 -5 1 -7 3s-3 4.33333 -3 7v60c0 2.66666 1 5 3 7s4.33333 3 7 3h60c2.66666 0 5 -1 7 -3s3 -4.33334 3 -7zM383 252c0 -9 -1.29166 -17.4167 -3.875 -25.25s-5.5 -14.2083 -8.75 -19.125
|
||||
s-7.83334 -9.875 -13.75 -14.875c-5.918 -5 -10.7097 -8.625 -14.375 -10.875c-3.66666 -2.25 -8.75 -5.20833 -15.25 -8.875c-6.83334 -3.83333 -12.5417 -9.25 -17.125 -16.25s-6.875 -12.5833 -6.875 -16.75c0 -2.83347 -1 -5.54179 -3 -8.125
|
||||
c-2 -2.58334 -4.33334 -3.87501 -7 -3.875h-60c-2.5 0 -4.625 1.54167 -6.375 4.625s-2.625 6.20833 -2.625 9.375v11.25c0 13.8333 5.41667 26.875 16.25 39.125s22.75 21.2917 35.75 27.125c9.83334 4.5 16.8333 9.16667 21 14s6.25 11.1667 6.25 19
|
||||
c0 7 -3.875 13.1667 -11.625 18.5s-16.7083 8 -26.875 8c-10.8333 0 -19.8333 -2.41666 -27 -7.25c-5.83333 -4.16666 -14.75 -13.75 -26.75 -28.75c-2.16667 -2.66667 -4.75 -4 -7.75 -4c-2 0 -4.08333 0.666672 -6.25 2l-41 31.25
|
||||
c-2.16667 1.66666 -3.45833 3.75 -3.875 6.25s0.0416718 4.83334 1.375 7c26.6668 44.3333 65.3334 66.5 116 66.5c13.3333 0 26.75 -2.58334 40.25 -7.75c13.5 -5.16699 25.6667 -12.0836 36.5 -20.75c10.8347 -8.66666 19.6681 -19.2917 26.5 -31.875
|
||||
c6.83334 -12.5833 10.25 -25.7917 10.25 -39.625z" />
|
||||
<glyph glyph-name="uniF343" unicode=""
|
||||
d="M150.588 448h361.412v-120.471h-361.412v120.471zM481.883 357.647v60.2354h-301.177v-60.2354h301.177zM150.588 146.823v120.471h361.412v-120.471h-361.412zM180.706 237.177v-60.2354h301.177v60.2354h-301.177zM150.588 -33.8828v120.471h361.412v-120.471h-361.412
|
||||
zM180.706 56.4707v-60.2354h301.177v60.2354h-301.177zM0 327.529v120.471h120.471v-120.471h-120.471zM30.1172 417.883v-60.2354h60.2354v60.2354h-60.2354zM0 146.823v120.471h120.471v-120.471h-120.471zM30.1172 237.177v-60.2354h60.2354v60.2354h-60.2354z
|
||||
M0 -33.8828v120.471h120.471v-120.471h-120.471zM30.1172 56.4707v-60.2354h60.2354v60.2354h-60.2354z" />
|
||||
<glyph glyph-name="uniF33C" unicode=""
|
||||
d="M431 69.75c0 -19.5 -6.58334 -35.8333 -19.75 -49c-13.1667 -13.1667 -29.5 -19.75 -49 -19.75c-22.5 0 -42.0833 8.33333 -58.75 25l-194.25 194c-18.8333 19.1667 -28.25 41.75 -28.25 67.75c0 26.5 9.16666 49 27.5 67.5s40.75 27.75 67.25 27.75
|
||||
c26.3333 0 49.0833 -9.41666 68.25 -28.25l151.25 -151.5c1.66666 -1.66667 2.5 -3.5 2.5 -5.5c0 -2.66667 -2.54166 -6.54167 -7.625 -11.625s-8.95834 -7.625 -11.625 -7.625c-2.17239 0 -4.08905 0.833328 -5.75 2.5l-151.5 151.75
|
||||
c-13.1667 12.8333 -28.25 19.25 -45.25 19.25c-17.6667 0 -32.5833 -6.25 -44.75 -18.75c-12.1667 -12.5 -18.25 -27.5833 -18.25 -45.25c0 -17.5 6.33334 -32.5833 19 -45.25l194 -194.25c10.5 -10.5 22.5833 -15.75 36.25 -15.75c10.6667 0 19.5 3.5 26.5 10.5
|
||||
s10.5 15.8333 10.5 26.5c0 13.6667 -5.25 25.75 -15.75 36.25l-145.25 145.25c-4.33333 4 -9.33333 6 -15 6c-4.83333 0 -8.83333 -1.58333 -12 -4.75s-4.75 -7.16667 -4.75 -12c0 -5.33333 2.08333 -10.25 6.25 -14.75l102.5 -102.5c1.66666 -1.66666 2.5 -3.5 2.5 -5.5
|
||||
c0 -2.66689 -2.58334 -6.58355 -7.75 -11.75c-5.16898 -5.16666 -9.08563 -7.75 -11.75 -7.75c-2 0 -3.83334 0.833336 -5.5 2.5l-102.5 102.5c-10.5 10.1671 -15.75 22.5838 -15.75 37.25c0 13.6667 4.75 25.25 14.25 34.75s21.0833 14.25 34.75 14.25
|
||||
c14.6671 0 27.0838 -5.25 37.25 -15.75l145.25 -145.25c16.6667 -16.3333 25 -35.9167 25 -58.75z" />
|
||||
<glyph glyph-name="uniF31E" unicode=""
|
||||
d="M430.1 256c17.7002 0 18.6006 -7 17.7002 -18.2002l-12.0996 -185.3c-1 -11.2998 -3.10059 -20.5 -21.1006 -20.5h-316.199c-17.6006 0 -20.2002 9.2998 -21.1006 20.5l-13 183c-1 11.2998 -0.0996094 20.5 17.6006 20.5h348.199zM426.2 304.7l1.59961 -32.7002h-343.399
|
||||
c0.5 6.2002 4 46.7002 5.5 63.4004c1.59961 18.0996 7.7998 16.5996 25.1992 16.5996h75.3008c28.2998 0 22.8994 0.200195 36.5996 -14.5996c16.5 -17.7002 19.0996 -17.4004 40.9004 -17.4004h143.199c10.6006 0 14.6006 -2.90039 15.1006 -15.2998z" />
|
||||
<glyph glyph-name="uniF318" unicode=""
|
||||
d="M288 0c-8.83203 0 -16 7.16797 -16 16v192c0 8.83203 7.16797 16 16 16s16 -7.16797 16 -16v-192c0 -8.83203 -7.16797 -16 -16 -16zM384 384c17.6797 0 32 -14.3203 32 -32v-32c0 -17.6641 -14.3203 -32 -32 -32v-288c0 -35.3438 -28.6562 -64 -64 -64h-224
|
||||
c-35.3438 0 -64 28.6562 -64 64v288c-17.6797 0 -32 14.3359 -32 32v32c0 17.6797 14.3203 32 32 32h96v32c0 17.6797 14.3203 32 32 32h96c17.6797 0 32 -14.3203 32 -32v-32h96zM160 400v-16h96v16c0 8.83203 -7.16797 16 -16 16h-64c-8.83203 0 -16 -7.16797 -16 -16z
|
||||
M352 0v288h-288v-288c0 -17.6641 14.3203 -32 32 -32h224c17.6797 0 32 14.3359 32 32zM368 320c8.83203 0 16 7.16797 16 16s-7.16797 16 -16 16h-320c-8.83203 0 -16 -7.16797 -16 -16s7.16797 -16 16 -16h320zM128 0c-8.83203 0 -16 7.16797 -16 16v192
|
||||
c0 8.83203 7.16797 16 16 16s16 -7.16797 16 -16v-192c0 -8.83203 -7.16797 -16 -16 -16zM208 0c-8.83203 0 -16 7.16797 -16 16v192c0 8.83203 7.16797 16 16 16s16 -7.16797 16 -16v-192c0 -8.83203 -7.16797 -16 -16 -16z" />
|
||||
<glyph glyph-name="uniF331" unicode=""
|
||||
d="M180.706 440.019l331.294 -64.8125v-353.461l-0.210938 0.0605469c-1.05371 -47.4658 -39.8154 -85.8057 -87.5518 -85.8057c-48.3994 0 -87.7627 39.3936 -87.7627 87.7627s39.3633 87.7627 87.7627 87.7627c22.166 0 42.1943 -8.52344 57.6455 -22.1064v140.529
|
||||
l-271.06 53.0371v-183.537c0.0302734 -1.02344 0.271484 -1.95703 0.271484 -3.04199c0 -1.08398 -0.271484 -2.04785 -0.301758 -3.07129v-0.180664v0c-1.74609 -46.8633 -40.1465 -84.541 -87.4307 -84.541c-48.3994 0 -87.7637 39.3945 -87.7637 87.7637
|
||||
c0 48.3682 39.3643 87.7627 87.7637 87.7627c22.0156 0 41.9229 -8.43359 57.3438 -21.8662v277.745zM123.362 38.7314c30.75 0 55.7168 24.2441 57.3438 54.6035v6.11328c-1.62695 30.3291 -26.5938 54.5732 -57.3438 54.5732
|
||||
c-31.8047 0 -57.6455 -25.8408 -57.6455 -57.6445c0 -31.8047 25.8408 -57.6455 57.6455 -57.6455zM210.823 313.646l271.06 -53.0078v89.751l-271.06 53.0674v-89.8105zM424.237 -33.8828c31.8037 0 57.6455 25.8418 57.6455 57.6455
|
||||
c0 31.8047 -25.8418 57.6455 -57.6455 57.6455c-31.8047 0 -57.6455 -25.8408 -57.6455 -57.6455c0 -31.8037 25.8408 -57.6455 57.6455 -57.6455z" />
|
||||
<glyph glyph-name="uniF303" unicode=""
|
||||
d="M384 144c0 -4.33333 -1.58334 -8.08333 -4.75 -11.25l-112 -112c-3.16666 -3.16667 -6.91666 -4.75 -11.25 -4.75c-4.33333 0 -8.08333 1.58333 -11.25 4.75l-112 112c-3.16667 3.16667 -4.75 6.91667 -4.75 11.25c-7.62939e-06 4.33333 1.58333 8.08333 4.75 11.25
|
||||
s6.91667 4.75 11.25 4.75h224c4.33334 0 8.08334 -1.58333 11.25 -4.75s4.75 -6.91667 4.75 -11.25zM384 240c0 -4.33333 -1.58334 -8.08333 -4.75 -11.25s-6.91666 -4.75 -11.25 -4.75h-224c-4.33333 0 -8.08333 1.58333 -11.25 4.75s-4.75 6.91667 -4.75 11.25
|
||||
c-7.62939e-06 4.33333 1.58333 8.08333 4.75 11.25l112 112c3.16667 3.16666 6.91667 4.75 11.25 4.75c4.33334 0 8.08334 -1.58334 11.25 -4.75l112 -112c3.16666 -3.16667 4.75 -6.91667 4.75 -11.25z" />
|
||||
<glyph glyph-name="uniF2FF" unicode=""
|
||||
d="M467.697 361.954c17.6182 -17.6191 17.6182 -46.291 -0.0302734 -63.8799l-272.716 -272.745l-158.057 -53.1582l51.8623 159.263l272.775 272.806c17.0771 17.0459 46.8936 17.0459 63.9092 0zM93.1836 47.6162l18.5527 -18.5527l59.1211 19.8779l-58.2471 58.2773z
|
||||
M131.162 131.223l63.5488 -63.5781l165.466 165.466l-63.5781 63.5488zM317.892 317.982l63.5781 -63.5488l21.9561 21.9561l-63.5781 63.5479zM446.403 319.367c5.87305 5.87305 5.87305 15.3906 -0.0292969 21.2939l-42.2559 42.2852
|
||||
c-5.69141 5.69141 -15.6006 5.69141 -21.293 0l-21.6846 -21.7148l63.5781 -63.5488z" />
|
||||
<glyph glyph-name="uniF339" unicode=""
|
||||
d="M320 72v40c0 2.33334 -0.75 4.25 -2.25 5.75s-3.41666 2.25 -5.75 2.25h-24v128c0 2.33333 -0.75 4.25 -2.25 5.75s-3.41666 2.25 -5.75 2.25h-80c-2.33333 0 -4.25 -0.75 -5.75 -2.25s-2.25 -3.41667 -2.25 -5.75v-40c0 -2.33333 0.75 -4.25 2.25 -5.75
|
||||
s3.41667 -2.25 5.75 -2.25h24v-80h-24c-2.33333 0 -4.25 -0.75 -5.75 -2.25s-2.25 -3.41666 -2.25 -5.75v-40c0 -2.33334 0.75 -4.25 2.25 -5.75s3.41667 -2.25 5.75 -2.25h112c2.33334 0 4.25 0.75 5.75 2.25s2.25 3.41666 2.25 5.75zM288 296v40
|
||||
c0 2.33334 -0.75 4.25 -2.25 5.75s-3.41666 2.25 -5.75 2.25h-48c-2.33333 0 -4.25 -0.75 -5.75 -2.25s-2.25 -3.41666 -2.25 -5.75v-40c0 -2.33334 0.75 -4.25 2.25 -5.75s3.41667 -2.25 5.75 -2.25h48c2.33334 0 4.25 0.75 5.75 2.25s2.25 3.41666 2.25 5.75zM448 192
|
||||
c0 -34.8333 -8.58334 -66.9583 -25.75 -96.375c-17.1674 -29.4167 -40.4591 -52.7083 -69.875 -69.875c-29.4167 -17.1667 -61.5417 -25.75 -96.375 -25.75c-34.8333 0 -66.9583 8.58333 -96.375 25.75c-29.4167 17.1667 -52.7083 40.4583 -69.875 69.875
|
||||
c-17.1667 29.4167 -25.75 61.5417 -25.75 96.375c0 34.8333 8.58334 66.9583 25.75 96.375s40.4583 52.7083 69.875 69.875s61.5417 25.75 96.375 25.75c34.8333 0 66.9583 -8.58334 96.375 -25.75c29.4167 -17.1673 52.7083 -40.459 69.875 -69.875
|
||||
c17.1667 -29.4168 25.75 -61.5418 25.75 -96.375z" />
|
||||
<glyph glyph-name="uniF317" unicode=""
|
||||
d="M351.25 135.5c0 4.33333 -1.58334 8.08333 -4.75 11.25l-45.25 45.25l45.25 45.25c3.16666 3.16667 4.75 6.91667 4.75 11.25c0 4.5 -1.58334 8.33334 -4.75 11.5l-22.5 22.5c-3.16666 3.16666 -7 4.75 -11.5 4.75c-4.33334 0 -8.08334 -1.58334 -11.25 -4.75
|
||||
l-45.25 -45.25l-45.25 45.25c-3.16667 3.16666 -6.91667 4.75 -11.25 4.75c-4.5 0 -8.33333 -1.58334 -11.5 -4.75l-22.5 -22.5c-3.16667 -3.16763 -4.75 -7.00096 -4.75 -11.5c0 -4.33333 1.58333 -8.08333 4.75 -11.25l45.25 -45.25l-45.25 -45.25
|
||||
c-3.16667 -3.16667 -4.75 -6.91667 -4.75 -11.25c0 -4.5 1.58333 -8.33334 4.75 -11.5l22.5 -22.5c3.16667 -3.16666 7 -4.75 11.5 -4.75c4.33333 0 8.08333 1.58334 11.25 4.75l45.25 45.25l45.25 -45.25c3.16666 -3.16666 6.91666 -4.75 11.25 -4.75
|
||||
c4.5 0 8.33334 1.58334 11.5 4.75l22.5 22.5c3.16666 3.16666 4.75 7 4.75 11.5zM448 192c0 -34.8333 -8.58334 -66.9583 -25.75 -96.375c-17.1674 -29.4167 -40.4591 -52.7083 -69.875 -69.875c-29.4167 -17.1667 -61.5417 -25.75 -96.375 -25.75
|
||||
c-34.8333 0 -66.9583 8.58333 -96.375 25.75c-29.4167 17.1667 -52.7083 40.4583 -69.875 69.875c-17.1667 29.4167 -25.75 61.5417 -25.75 96.375c0 34.8333 8.58334 66.9583 25.75 96.375s40.4583 52.7083 69.875 69.875s61.5417 25.75 96.375 25.75
|
||||
c34.8333 0 66.9583 -8.58334 96.375 -25.75c29.4167 -17.1673 52.7083 -40.459 69.875 -69.875c17.1667 -29.4168 25.75 -61.5418 25.75 -96.375z" />
|
||||
<glyph glyph-name="uniF336" unicode=""
|
||||
d="M340.8 349.6c-38.2002 0 -71 -23.5 -84.7002 -56.7998c-13.8994 33.4004 -46.5996 56.7998 -84.7998 56.7998c-50.7998 0 -91.8994 -41.2998 -91.8994 -92.2998c0 -24.7998 9.7998 -47.2998 25.5996 -63.8994l151 -152.5l148.4 149.8
|
||||
c17.3994 16.7998 28.2998 40.3994 28.2998 66.5996c0 51 -41.2002 92.2998 -91.9004 92.2998zM340.8 365v0c59.1006 0 107.2 -48.2998 107.2 -107.7c0 -29.5996 -11.7998 -57.2002 -32.7998 -77.5l-148.3 -149.8l-10.9004 -11l-10.9004 11l-151.199 152.7
|
||||
c-19.3008 20.2002 -29.9004 46.7002 -29.9004 74.5996c0 59.4004 48.0996 107.7 107.2 107.7c33.7998 0 64.7998 -15.7998 84.7998 -41.7998c20 26 51 41.7998 84.7998 41.7998z" />
|
||||
<glyph glyph-name="uniF312" unicode=""
|
||||
d="M368 176v32c0 4.33333 -1.58334 8.08333 -4.75 11.25s-6.91666 4.75 -11.25 4.75h-64v64c0 4.33334 -1.58334 8.08334 -4.75 11.25s-6.91666 4.75 -11.25 4.75h-32c-4.33333 0 -8.08333 -1.58334 -11.25 -4.75s-4.75 -6.91666 -4.75 -11.25v-64h-64
|
||||
c-4.33333 0 -8.08333 -1.58333 -11.25 -4.75s-4.75 -6.91667 -4.75 -11.25v-32c0 -4.33333 1.58333 -8.08333 4.75 -11.25s6.91667 -4.75 11.25 -4.75h64v-64c0 -4.33334 1.58333 -8.08334 4.75 -11.25s6.91667 -4.75 11.25 -4.75h32c4.33334 0 8.08334 1.58334 11.25 4.75
|
||||
s4.75 6.91666 4.75 11.25v64h64c4.33334 0 8.08334 1.58333 11.25 4.75s4.75 6.91667 4.75 11.25zM448 192c0 -34.8333 -8.58334 -66.9583 -25.75 -96.375c-17.1674 -29.4167 -40.4591 -52.7083 -69.875 -69.875c-29.4167 -17.1667 -61.5417 -25.75 -96.375 -25.75
|
||||
c-34.8333 0 -66.9583 8.58333 -96.375 25.75c-29.4167 17.1667 -52.7083 40.4583 -69.875 69.875c-17.1667 29.4167 -25.75 61.5417 -25.75 96.375c0 34.8333 8.58334 66.9583 25.75 96.375s40.4583 52.7083 69.875 69.875s61.5417 25.75 96.375 25.75
|
||||
c34.8333 0 66.9583 -8.58334 96.375 -25.75c29.4167 -17.1673 52.7083 -40.459 69.875 -69.875c17.1667 -29.4168 25.75 -61.5418 25.75 -96.375z" />
|
||||
<glyph glyph-name="uniF333" unicode=""
|
||||
d="M351.383 448l160.617 -159.864v-352.136h-376.471v30.1172h346.354v301.177h-150.589v150.589h-210.342v-29.6367h14.126c24.9072 0 45.1758 -20.2686 45.1758 -45.1758v-258.561l-74.21 -149.354l-75.9268 149.264v258.65c0 24.9072 20.2695 45.1758 45.1768 45.1758
|
||||
h15.541v59.7539h260.548zM117.7 26.293l32.4062 65.2646v176.219h-29.6357v-181.52h-30.1182v181.52h-30.1172v-176.128l33.25 -65.3555h24.2148zM150.106 343.07c0 8.28223 -6.74609 15.0586 -15.0586 15.0586h-59.7539c-8.28223 0 -15.0586 -6.77637 -15.0586 -15.0586
|
||||
v-45.1768h89.8711v45.1768zM361.412 395.535v-98.123h98.5742z" />
|
||||
<glyph glyph-name="uniF328" unicode=""
|
||||
d="M392 192.75c0 26.8333 -7.25 51.4167 -21.75 73.75l-188.5 -188.25c22.8333 -14.8333 47.5833 -22.25 74.25 -22.25c18.5 0 36.125 3.625 52.875 10.875s31.2083 16.9583 43.375 29.125s21.8333 26.7083 29 43.625c7.16666 16.9167 10.75 34.625 10.75 53.125z
|
||||
M142.25 118l188.75 188.5c-22.5 15.1667 -47.5 22.75 -75 22.75c-24.6667 0 -47.4167 -6.08334 -68.25 -18.25s-37.3333 -28.75 -49.5 -49.75c-12.1667 -21 -18.25 -43.8333 -18.25 -68.5c0 -27 7.41666 -51.9167 22.25 -74.75zM448 192.75
|
||||
c0 -26.1667 -5.08334 -51.1667 -15.25 -75c-10.1667 -23.8333 -23.7917 -44.3333 -40.875 -61.5c-17.0833 -17.1667 -37.5 -30.8333 -61.25 -41c-23.75 -10.1667 -48.625 -15.25 -74.625 -15.25c-26 -4.76837e-07 -50.875 5.08333 -74.625 15.25
|
||||
c-23.75 10.1667 -44.1667 23.8333 -61.25 41c-17.0833 17.1667 -30.7083 37.6667 -40.875 61.5c-10.1667 23.8333 -15.25 48.8333 -15.25 75c0 26.1667 5.08334 51.125 15.25 74.875s23.7917 44.2083 40.875 61.375c17.0833 17.1667 37.5 30.8333 61.25 41
|
||||
s48.625 15.25 74.625 15.25s50.875 -5.08334 74.625 -15.25c23.75 -10.1668 44.1667 -23.8335 61.25 -41c17.0833 -17.1667 30.7083 -37.625 40.875 -61.375s15.25 -48.7083 15.25 -74.875z" />
|
||||
<glyph glyph-name="uniF335" unicode=""
|
||||
d="M376.38 448l135.62 -125.952v-295.695h-151.101v30.1182h120.983v240.941h-120.471v120.471h-150.589v-30.4189h-30.1172v60.5361h195.674zM391.529 392.824v-65.2949h70.3252zM0 357.647h195.675l135.619 -125.952v-295.695h-331.294v421.647zM210.823 302.472v-65.2949
|
||||
h70.3252zM30.1172 -33.8828h271.06v240.941h-120.471v120.471h-150.589v-361.412z" />
|
||||
<glyph glyph-name="uniF2FB" unicode=""
|
||||
d="M512 207.059c0 -66.4395 -54.0312 -120.471 -120.471 -120.471c-36.0508 0 -69.5713 16.0225 -92.582 43.7314l-0.0595703 -0.0302734l-0.421875 0.541992c-0.331055 0.421875 -0.783203 0.692383 -1.14453 1.14453l0.120117 0.0898438l-109.447 134.987
|
||||
c-17.1367 19.2754 -41.7432 30.3594 -67.5234 30.3594c-49.8145 0 -90.3535 -40.5391 -90.3535 -90.3535s40.5391 -90.3525 90.3535 -90.3525c27.5576 0 53.2783 12.3477 70.5352 33.8818l0.271484 -0.210938l24.6055 30.4795l23.4316 -18.9141l-24.7861 -30.6895
|
||||
l-0.301758 0.240234c-22.9795 -28.5205 -57.1328 -44.9053 -93.7559 -44.9053c-66.4395 0 -120.471 54.0312 -120.471 120.471s54.0312 120.471 120.471 120.471c33.7314 0 65.8369 -14.3662 88.6357 -39.1826l0.241211 0.180664l1.26465 -1.56641l111.375 -137.337
|
||||
c17.2578 -20.8711 42.4365 -32.918 69.542 -32.918c49.8145 0 90.3535 40.5381 90.3535 90.3525s-40.5391 90.3535 -90.3535 90.3535c-25.4795 0 -49.6943 -10.9033 -66.8613 -29.7871l-28.5518 -35.3877l-23.4307 18.9141l28.5508 35.3877l-0.120117 0.0908203
|
||||
c22.8896 25.9912 55.8682 40.8994 90.4131 40.8994c66.4395 0 120.471 -54.0312 120.471 -120.471z" />
|
||||
<glyph glyph-name="uniF329" unicode=""
|
||||
d="M384 312.471c70.5654 0 128 -57.4346 128 -128s-57.4346 -128 -128 -128h-286.117c-53.9717 0 -97.8828 43.9111 -97.8828 97.8818c0 55.0254 46.6826 100.051 100.984 97.8223c21.4736 54.5732 73.2158 90.4131 132.428 90.4131
|
||||
c37.165 0 72.8848 -14.8779 99.6592 -41.1709c16.4141 7.34863 33.5205 11.0537 50.9287 11.0537zM384 86.5879c53.9707 0 97.8828 43.9121 97.8828 97.8828s-43.9121 97.8818 -97.8828 97.8818c-16.0527 0 -31.834 -4.24609 -46.9834 -12.5889l-10.6621 -5.87305
|
||||
l-7.98047 9.21582c-21.6553 24.998 -52.6465 39.3643 -84.9619 39.3643c-50.0254 0 -93.3047 -32.5273 -107.701 -80.9561l-3.79492 -12.71l-13.1006 2.16895c-3.58398 0.571289 -7.16797 1.14355 -10.9326 1.14355c-37.376 0 -67.7656 -30.3887 -67.7656 -67.7646
|
||||
s30.3896 -67.7646 67.7656 -67.7646h286.117z" />
|
||||
<glyph glyph-name="uniF338" unicode=""
|
||||
d="M320 80v-32c0 -4.33301 -1.58301 -8.08301 -4.75 -11.25s-6.91699 -4.75 -11.25 -4.75h-128c-4.33301 0 -8.08301 1.58301 -11.25 4.75s-4.75 6.91699 -4.75 11.25v32c0 4.33301 1.58301 8.08301 4.75 11.25s6.91699 4.75 11.25 4.75h16v96h-16
|
||||
c-4.33301 0 -8.08301 1.58301 -11.25 4.75s-4.75 6.91699 -4.75 11.25v32c0 4.33301 1.58301 8.08301 4.75 11.25s6.91699 4.75 11.25 4.75h96c4.33301 0 8.08301 -1.58301 11.25 -4.75s4.75 -6.91699 4.75 -11.25v-144h16c4.33301 0 8.08301 -1.58301 11.25 -4.75
|
||||
s4.75 -6.91699 4.75 -11.25zM288 368v-48c0 -4.33301 -1.58301 -8.08301 -4.75 -11.25s-6.91699 -4.75 -11.25 -4.75h-64c-4.33301 0 -8.08301 1.58301 -11.25 4.75s-4.75 6.91699 -4.75 11.25v48c0 4.33301 1.58301 8.08301 4.75 11.25s6.91699 4.75 11.25 4.75h64
|
||||
c4.33301 0 8.08301 -1.58301 11.25 -4.75s4.75 -6.91699 4.75 -11.25z" />
|
||||
<glyph glyph-name="uniF33B" unicode=""
|
||||
d="M368 176v32c0 4.33333 -1.58334 8.08333 -4.75 11.25s-6.91666 4.75 -11.25 4.75h-192c-4.33333 0 -8.08333 -1.58333 -11.25 -4.75s-4.75 -6.91667 -4.75 -11.25v-32c0 -4.33333 1.58333 -8.08333 4.75 -11.25s6.91667 -4.75 11.25 -4.75h192
|
||||
c4.33334 0 8.08334 1.58333 11.25 4.75s4.75 6.91667 4.75 11.25zM448 192c0 -34.8333 -8.58334 -66.9583 -25.75 -96.375c-17.1674 -29.4167 -40.4591 -52.7083 -69.875 -69.875c-29.4167 -17.1667 -61.5417 -25.75 -96.375 -25.75
|
||||
c-34.8333 0 -66.9583 8.58333 -96.375 25.75c-29.4167 17.1667 -52.7083 40.4583 -69.875 69.875c-17.1667 29.4167 -25.75 61.5417 -25.75 96.375c0 34.8333 8.58334 66.9583 25.75 96.375s40.4583 52.7083 69.875 69.875s61.5417 25.75 96.375 25.75
|
||||
c34.8333 0 66.9583 -8.58334 96.375 -25.75c29.4167 -17.1673 52.7083 -40.459 69.875 -69.875c17.1667 -29.4168 25.75 -61.5418 25.75 -96.375z" />
|
||||
<glyph glyph-name="uniF341" unicode=""
|
||||
d="M512 244.706c0 -70.5654 -57.4043 -128 -128 -128h-83.0342v30.1172h83.0342c53.9707 0 97.8828 43.9121 97.8828 97.8828s-43.9121 97.8818 -97.8828 97.8818c-16.0225 0 -31.834 -4.24609 -46.9834 -12.5586l-10.6621 -5.87305l-7.98047 9.21582
|
||||
c-21.6553 24.9678 -52.6465 39.334 -84.9619 39.334c-50.0254 0 -93.335 -32.5273 -107.701 -80.9561l-3.79492 -12.71l-13.1006 2.16797c-3.58398 0.572266 -7.16797 1.14453 -10.9326 1.14453c-37.3467 0 -67.7656 -30.3887 -67.7656 -67.7646
|
||||
s30.4189 -67.7646 67.7656 -67.7646h111.404v-30.1172h-111.404c-53.9717 0 -97.8828 43.9111 -97.8828 97.8818c0 54.9951 46.0498 100.442 100.984 97.8223c21.4736 54.5732 73.2158 90.4131 132.428 90.4131c37.165 0 72.8848 -14.8779 99.6592 -41.1709
|
||||
c16.4443 7.34863 33.5205 11.0537 50.9287 11.0537c70.5957 0 128 -57.4346 128 -128zM320.633 181.338l-49.5742 49.6045v-234.707h-30.1172v234.707l-49.6035 -49.5742l-21.2939 21.2939l85.9561 85.9248l85.9258 -85.9551z" />
|
||||
<glyph glyph-name="uniF32F" unicode=""
|
||||
d="M288 72.25v47.5c0 2.3338 -0.791656 4.29214 -2.375 5.875c-1.58334 1.58334 -3.45834 2.375 -5.625 2.375h-48c-2.16667 0 -4.04167 -0.791664 -5.625 -2.375s-2.375 -3.54166 -2.375 -5.875v-47.5c0 -2.33334 0.791672 -4.29166 2.375 -5.875
|
||||
s3.45833 -2.375 5.625 -2.375h48c2.16666 -3.8147e-06 4.04166 0.791664 5.625 2.375c1.58334 1.5836 2.375 3.54193 2.375 5.875zM287.5 165.75l4.5 114.75c0 2 -0.833344 3.58334 -2.5 4.75c-2.16666 1.83334 -4.16666 2.75 -6 2.75h-55
|
||||
c-1.83333 0 -3.83333 -0.916656 -6 -2.75c-1.66667 -1.16666 -2.5 -2.91666 -2.5 -5.25l4.25 -114.25c0 -1.66667 0.833328 -3.04167 2.5 -4.125s3.66667 -1.625 6 -1.625h46.25c2.33765 0 4.29599 0.541672 5.875 1.625c1.58334 1.08333 2.45834 2.45833 2.625 4.125z
|
||||
M284 399.25l192 -352c5.83331 -10.5 5.66666 -21 -0.5 -31.5c-2.83334 -4.83333 -6.70834 -8.66667 -11.625 -11.5c-4.91754 -2.83333 -10.2092 -4.25 -15.875 -4.25h-384c-5.66667 0 -10.9583 1.41667 -15.875 4.25c-4.91667 2.83333 -8.79167 6.66667 -11.625 11.5
|
||||
c-6.16678 10.5 -6.33345 21 -0.5 31.5l192 352c2.83333 5.16666 6.75 9.25 11.75 12.25s10.4167 4.5 16.25 4.5c5.83334 0 11.25 -1.5 16.25 -4.5s8.91666 -7.08334 11.75 -12.25z" />
|
||||
<glyph glyph-name="uniF340" unicode=""
|
||||
d="M256 268.138c41.502 0 75.2939 -33.792 75.2939 -75.2939c0 -41.5029 -33.792 -75.2949 -75.2939 -75.2949s-75.2939 33.792 -75.2939 75.2949c0 41.502 33.792 75.2939 75.2939 75.2939zM256 147.667c24.9072 0 45.1768 20.2686 45.1768 45.1768
|
||||
c0 24.9072 -20.2695 45.1758 -45.1768 45.1758s-45.1768 -20.2686 -45.1768 -45.1758c0 -24.9082 20.2695 -45.1768 45.1768 -45.1768zM510.193 163.509l-77.9453 -23.3711c-3.61328 -12.1074 -8.37207 -23.7334 -14.2754 -34.6357l38.4902 -71.5596
|
||||
c-12.2275 -15.3896 -26.1719 -29.334 -41.5625 -41.5928l-71.5596 38.5205c-10.9023 -5.90234 -22.5273 -10.6611 -34.6348 -14.2754l-23.3711 -77.9443c-9.6377 -1.11426 -19.4258 -1.80664 -29.335 -1.80664c-9.9082 0 -19.667 0.692383 -29.335 1.80664l-23.3711 77.9443
|
||||
c-12.1074 3.61426 -23.7324 8.37305 -34.6348 14.2754l-71.5898 -38.5205c-15.3906 12.2285 -29.335 26.1729 -41.5625 41.5625l38.5205 71.5596c-5.90332 10.9033 -10.6621 22.5283 -14.2754 34.666l-77.9453 23.3711c-1.11426 9.6377 -1.80664 19.3955 -1.80664 29.335
|
||||
c0 9.93848 0.692383 19.6963 1.80664 29.334l77.9746 23.4316c3.61426 12.1074 8.37305 23.7324 14.2764 34.6357l-38.5205 71.5293c12.1973 15.3896 26.1416 29.334 41.5322 41.5625l71.5898 -38.5508c10.8721 5.93262 22.4971 10.7217 34.6348 14.3057l23.3711 77.9443
|
||||
c9.6377 1.11426 19.3965 1.80762 29.335 1.80762s19.6973 -0.693359 29.335 -1.80762l23.3711 -77.9443c12.1074 -3.61426 23.7021 -8.37305 34.6348 -14.2754l71.5898 38.5498c15.3906 -12.2578 29.335 -26.2021 41.5625 -41.5615l-38.5205 -71.5898
|
||||
c5.90332 -10.9023 10.6914 -22.498 14.2754 -34.6055l77.9453 -23.4316c1.11426 -9.66797 1.80664 -19.4258 1.80664 -29.334c0 -9.90918 -0.692383 -19.667 -1.80664 -29.335zM408.034 164.322l73.7275 22.1064c0.0908203 2.16797 0.121094 4.30664 0.121094 6.41504
|
||||
c0 2.10742 -0.0302734 4.24609 -0.0605469 6.41504l-58.1875 17.498l-15.6006 4.66797l-4.63867 15.6016c-3.01172 10.0889 -6.9873 19.7871 -11.8965 28.8223l-7.74023 14.3057l7.68066 14.3057l28.7021 53.3086c-2.98242 3.16211 -6.08398 6.23438 -9.2168 9.21582
|
||||
l-67.584 -36.3818l-14.3057 7.67969c-9.06543 4.90918 -18.8232 8.91504 -28.9131 11.9268l-15.6006 4.6377l-4.66797 15.6016l-17.4385 58.1875c-2.16895 0.0595703 -4.30664 0.0898438 -6.41504 0.0898438s-4.24609 -0.0302734 -6.44531 -0.0605469l-17.4375 -58.1865
|
||||
l-4.66895 -15.6016l-15.6006 -4.6377c-10.1494 -3.01172 -19.8477 -7.01758 -28.793 -11.8965l-14.3359 -7.80078l-67.6738 36.4424c-3.13281 -2.98145 -6.2041 -6.08398 -9.18652 -9.21582l36.3828 -67.6143l-7.70996 -14.3057
|
||||
c-4.90918 -9.00488 -8.91504 -18.7334 -11.9268 -28.8828l-4.63867 -15.6006l-73.7275 -22.1064c-0.0908203 -2.16895 -0.121094 -4.30762 -0.121094 -6.41504c0 -2.07812 0.0302734 -4.2168 0.121094 -6.38574l73.7578 -22.1064l4.6084 -15.5703
|
||||
c3.04199 -10.1494 7.04688 -19.8779 11.9268 -28.9131l7.70996 -14.3057l-36.3828 -67.584c2.98242 -3.16211 6.08398 -6.23438 9.2168 -9.21582l67.6133 36.3516l14.3066 -7.70996c9.03516 -4.90918 18.7627 -8.91504 28.8828 -11.9268l15.6006 -4.6377l4.66797 -15.6016
|
||||
l17.4385 -58.1865c2.16895 -0.0605469 4.30664 -0.0908203 6.41504 -0.0908203s4.24707 0.0302734 6.41504 0.0908203l17.4385 58.1865l4.66797 15.6016l15.6006 4.6377c10.1201 3.04199 19.8477 7.01758 28.9131 11.9268l14.3057 7.70996l67.5547 -36.4121
|
||||
c3.16211 2.98145 6.23438 6.05371 9.21582 9.21582l-28.6719 53.3086l-7.68066 14.3057l7.70996 14.3057c4.90918 9.00586 8.91504 18.7334 11.9268 28.8828z" />
|
||||
<glyph glyph-name="uniF332" unicode=""
|
||||
d="M30.1172 417.883h451.766v-451.766h-451.766v451.766zM451.765 -3.76465v60.2354h-391.529v-60.2354h391.529zM60.2354 86.5879h391.529v301.177h-391.529v-301.177zM427.761 141.854l-20.9922 -21.5947l-72.7939 70.7461l-46.8027 -50.4766l-74.873 132.969
|
||||
l-102.43 -149.835l-24.877 16.9863l129.807 189.831l78.4268 -139.203l39.665 42.8271z" />
|
||||
<glyph glyph-name="uniF316" unicode=""
|
||||
d="M404.5 85.5c0 -6.66674 -2.33334 -12.3334 -7 -17l-34 -34c-4.66803 -4.66667 -10.3347 -7 -17 -7c-6.66925 0 -12.3359 2.33333 -17 7l-73.5 73.5l-73.5 -73.5c-4.66667 -4.66667 -10.3333 -7 -17 -7s-12.3333 2.33333 -17 7l-34 34c-4.66666 4.66666 -7 10.3333 -7 17
|
||||
s2.33334 12.3333 7 17l73.5 73.5l-73.5 73.5c-4.66666 4.66667 -7 10.3333 -7 17s2.33334 12.3333 7 17l34 34c4.66696 4.66666 10.3336 7 17 7c6.66733 0 12.334 -2.33334 17 -7l73.5 -73.5l73.5 73.5c4.66666 4.66666 10.3333 7 17 7s12.3333 -2.33334 17 -7l34 -34
|
||||
c4.66666 -4.66772 7 -10.3344 7 -17c0 -6.66666 -2.33334 -12.3333 -7 -17l-73.5 -73.5l73.5 -73.5c4.66666 -4.66685 7 -10.3335 7 -17z" />
|
||||
<glyph glyph-name="uniF300" unicode=""
|
||||
d="M180.706 207.059h-180.706v180.706h30.1172v-123.753c30.5098 96.165 121.556 165.165 225.883 165.165c105.593 0 199.409 -71.0781 228.111 -172.846l-29.0039 -8.16211c-25.0576 88.8477 -106.947 150.92 -199.107 150.92
|
||||
c-97.1592 -0.0302734 -181.188 -68.5479 -202.029 -161.912h126.735v-30.1182zM331.294 176.941h180.706v-180.706h-30.1172v123.724c-30.8711 -96.4375 -121.706 -165.105 -225.883 -165.105c-105.623 0 -199.439 71.0781 -228.111 172.846l29.0039 8.16113
|
||||
c25.0273 -88.8467 106.887 -150.919 199.107 -150.919c97.25 0 181.157 68.4873 202.029 161.882h-126.735v30.1182z" />
|
||||
<glyph glyph-name="uniF32C" unicode=""
|
||||
d="M512 244.706c0 -70.5654 -57.4043 -128 -128 -128h-83.0342v30.1172h83.0342c53.9707 0 97.8828 43.9121 97.8828 97.8828s-43.9121 97.8818 -97.8828 97.8818c-16.0225 0 -31.834 -4.24609 -46.9834 -12.5586l-10.6621 -5.87305l-7.98047 9.21582
|
||||
c-21.6553 24.9678 -52.6465 39.334 -84.9619 39.334c-50.0254 0 -93.335 -32.5273 -107.701 -80.9561l-3.79492 -12.71l-13.1006 2.16797c-3.58398 0.572266 -7.16797 1.14453 -10.9326 1.14453c-37.3467 0 -67.7656 -30.3887 -67.7656 -67.7646
|
||||
s30.4189 -67.7646 67.7656 -67.7646h111.404v-30.1172h-111.404c-53.9717 0 -97.8828 43.9111 -97.8828 97.8818c0 54.9951 45.5078 100.442 100.984 97.8223c21.4736 54.5732 73.2158 90.4131 132.428 90.4131c37.165 0 72.8848 -14.8779 99.6592 -41.1709
|
||||
c16.4443 7.34863 33.5205 11.0537 50.9287 11.0537c70.5957 0 128 -57.4346 128 -128zM271.059 34.4844l49.6035 49.6045l21.2939 -21.2939l-85.9561 -85.9551l-85.9258 85.9258l21.293 21.293l49.5742 -49.5742v232.81h30.1172v-232.81z" />
|
||||
<glyph glyph-name="uniF311" unicode=""
|
||||
d="M416 232v-48c0 -6.66699 -2.33301 -12.333 -7 -17c-4.66992 -4.66699 -10.3369 -7 -17 -7h-104v-104c0 -6.66699 -2.33301 -12.333 -7 -17c-4.66895 -4.66699 -10.3359 -7 -17 -7h-48c-6.66699 0 -12.333 2.33301 -17 7s-7 10.333 -7 17v104h-104
|
||||
c-6.66699 0 -12.334 2.33301 -17 7c-4.66699 4.66699 -7 10.334 -7 17v48c0 6.66797 2.33301 12.334 7 17c4.66699 4.66699 10.333 7 17 7h104v104c0 6.66699 2.33301 12.333 7 17c4.66797 4.66699 10.334 7 17 7h48c6.66699 0 12.333 -2.33301 17 -7
|
||||
c4.66699 -4.66992 7 -10.3359 7 -17v-104h104c6.66699 0 12.333 -2.33301 17 -7s7 -10.333 7 -17z" />
|
||||
<glyph glyph-name="uniF31D" unicode=""
|
||||
d="M291.147 448l160.617 -159.864v-352.136h-391.529v512h230.912zM301.177 395.535v-98.123h98.5752zM90.3525 -33.8828h331.295v301.177h-150.589v150.589h-180.706v-451.766z" />
|
||||
<glyph glyph-name="uniF32A" unicode=""
|
||||
d="M193.3 187.6l-11.5996 11.6006l74.5 74.2998l74.5 -74.2998l-11.7002 -11.6006l-54.5996 54.6006v-241.8h-16.5v241.8zM399.3 264.4c45.2002 -0.100586 80.7002 -40.1006 80.7002 -85.6006s-37 -82.7998 -82 -82.7998v0h-101v16h97.2998h3.2002
|
||||
c36.7002 0.200195 66.5 30.2998 66.5 67.0996c0 36.9004 -29 69.8008 -65.5996 70.3008l-15.2002 0.0996094s0.200195 7 0.200195 20.2998c0 55.6006 -45.6006 98.9004 -100.9 98.9004c-38.2998 0 -73.7998 -22.5 -90.4004 -57.4004l-6.5 -13.7002l-13.5 6.80078
|
||||
c-6.19922 3.19922 -13 4.7998 -19.8994 4.7998c-21.7998 0 -40.2998 -17.7002 -43.9004 -39.2998l-1.5 -8.80078l-8.39941 -2.89941c-30 -10.4004 -50.2002 -39.7998 -50.2002 -71.6006c0 -41.0996 33.2998 -74.5996 74.2002 -74.5996h90.5996v-16h-91.4004
|
||||
c-49.5 0 -89.5996 40.5 -89.5996 90.2002c0 39.5996 25.4004 74.2002 60.5996 86.2998c4.80078 28.4004 29.3008 52 58.9004 52c9.7002 0 18.7002 -2.2998 26.7998 -6.40039c18.6006 39.2002 58.2998 66.3008 104.4 66.3008c64 0 116.8 -52.1006 116.8 -116.4
|
||||
c0 -1.2002 -0.200195 -2.40039 -0.200195 -3.59961z" />
|
||||
<glyph glyph-name="uniF334" unicode=""
|
||||
d="M391.259 244.706l120.741 83.8174v-303.134l-120.712 83.8174v-67.7949c0 -24.9072 -20.4189 -45.1768 -45.5371 -45.1768h-239.857c-24.9072 0 -45.1768 20.2695 -45.1768 45.1768v165.616h-15.1787c-25.1182 0 -45.5381 20.2695 -45.5381 45.1768v60.2656
|
||||
c0 24.9072 20.4199 45.1768 45.5381 45.1768h44.8145v15.0586c0 24.9072 20.2695 45.1768 45.1768 45.1768h166.882v-30.1182h-166.882c-8.28223 0 -15.0586 -6.74609 -15.0586 -15.0586v-15.0586h225.25c25.1182 0 45.5381 -20.2695 45.5381 -45.1768v-67.7646z
|
||||
M481.883 82.9443v187.994l-120.712 -83.8477v125.38c0 8.3125 -6.92676 15.0586 -15.4199 15.0586h-300.213c-8.52344 0 -15.4209 -6.74609 -15.4209 -15.0586v-60.2656c0 -8.3125 6.89746 -15.0586 15.4209 -15.0586h45.2969v-195.734
|
||||
c0 -8.3125 6.77637 -15.0596 15.0586 -15.0596h239.827c8.52344 0 15.4199 6.74707 15.4199 15.0596v125.35z" />
|
||||
<glyph glyph-name="uniF33A" unicode=""
|
||||
d="M416 232v-48c0 -6.66699 -2.33301 -12.333 -7 -17c-4.66992 -4.66699 -10.3369 -7 -17 -7h-304c-6.66699 0 -12.334 2.33301 -17 7c-4.66699 4.66699 -7 10.334 -7 17v48c0 6.66797 2.33301 12.334 7 17c4.66699 4.66699 10.333 7 17 7h304
|
||||
c6.66699 0 12.333 -2.33301 17 -7s7 -10.333 7 -17z" />
|
||||
<glyph glyph-name="uniF337" unicode=""
|
||||
d="M448 192c0 -26 -5.08334 -50.8333 -15.25 -74.5c-10.1669 -23.6667 -23.8335 -44.0834 -41 -61.25c-17.1674 -17.1667 -37.584 -30.8333 -61.25 -41c-23.6667 -10.1667 -48.5 -15.25 -74.5 -15.25c-28.6667 0 -55.9167 6.04167 -81.75 18.125
|
||||
c-25.8333 12.0833 -47.8333 29.125 -66 51.125c-1.1683 1.66666 -1.70996 3.54166 -1.625 5.625c0.0837402 2.08363 0.792076 3.79196 2.125 5.125l34.25 34.5c1.66667 1.5 3.75 2.25 6.25 2.25c2.66783 -0.333336 4.5845 -1.33334 5.75 -3
|
||||
c12.1668 -15.8333 27.0835 -28.0833 44.75 -36.75c17.6667 -8.66667 36.4167 -13 56.25 -13c17.3333 0 33.875 3.375 49.625 10.125s29.375 15.875 40.875 27.375s20.625 25.125 27.375 40.875s10.125 32.2917 10.125 49.625s-3.375 33.875 -10.125 49.625
|
||||
s-15.875 29.375 -27.375 40.875s-25.125 20.625 -40.875 27.375s-32.2917 10.125 -49.625 10.125c-16.3333 0 -32 -2.95834 -47 -8.875s-28.3333 -14.375 -40 -25.375l34.25 -34.5c5.16826 -5 6.33493 -10.75 3.5 -17.25c-2.83333 -6.66667 -7.75 -10 -14.75 -10h-112
|
||||
c-4.33334 0 -8.08334 1.58333 -11.25 4.75c-3.16667 3.16667 -4.75 6.91667 -4.75 11.25v112c0 7 3.33334 11.9167 10 14.75c6.5 2.8277 12.25 1.66104 17.25 -3.5l32.5 -32.25c17.8333 16.8333 38.2083 29.875 61.125 39.125s46.625 13.875 71.125 13.875
|
||||
c26 0 50.8333 -5.08334 74.5 -15.25c23.6667 -10.1668 44.0833 -23.8335 61.25 -41c17.1667 -17.1672 30.8333 -37.5839 41 -61.25c10.1667 -23.6667 15.25 -48.5 15.25 -74.5zM288 264v-112c0 -2.33333 -0.75 -4.25 -2.25 -5.75s-3.41666 -2.25 -5.75 -2.25h-80
|
||||
c-2.33333 0 -4.25 0.75 -5.75 2.25s-2.25 3.41667 -2.25 5.75v16c0 2.33333 0.75 4.25 2.25 5.75s3.41667 2.25 5.75 2.25h56v88c0 2.33334 0.75 4.25 2.25 5.75s3.41666 2.25 5.75 2.25h16c2.33334 0 4.25 -0.75 5.75 -2.25s2.25 -3.41666 2.25 -5.75z" />
|
||||
</font>
|
||||
</defs></svg>
|
After Width: | Height: | Size: 46 KiB |
BIN
resources/assets/fonts/jquery.filer-icons/jquery-filer.ttf
Normal file
BIN
resources/assets/fonts/jquery.filer-icons/jquery-filer.woff
Normal file
0
resources/css/app.css
vendored
12
resources/css/bootstrap.min.css
vendored
Normal file
415
resources/css/jquery.filer.css
vendored
Normal file
|
@ -0,0 +1,415 @@
|
|||
/*!
|
||||
* CSS jQuery.filer
|
||||
* Copyright (c) 2016 CreativeDream
|
||||
* Version: 1.3 (14-Sep-2016)
|
||||
*/
|
||||
@import url('../assets/fonts/jquery.filer-icons/jquery-filer.css');
|
||||
|
||||
/*-------------------------
|
||||
Basic configurations
|
||||
-------------------------*/
|
||||
.jFiler * {
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.jFiler {
|
||||
font-family: sans-serif;
|
||||
font-size: 14px;
|
||||
color: #494949;
|
||||
}
|
||||
|
||||
/* Helpers */
|
||||
.jFiler ul.list-inline li {
|
||||
display: inline-block;
|
||||
padding-right: 5px;
|
||||
padding-left: 5px;
|
||||
}
|
||||
|
||||
.jFiler .pull-left {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.jFiler .pull-right {
|
||||
float: right;
|
||||
}
|
||||
|
||||
/* File Icons */
|
||||
span.jFiler-icon-file {
|
||||
position: relative;
|
||||
display: block;
|
||||
background: #e1e1e1 url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMQAAAEACAYAAADsqNl9AAAD5klEQVR42u3azUqUURjA8bHAEpIK+9hlRBGC0QfVustI+oAo2nQJgYGFFEUhJF1NUVAXEC6iSyhIDCoX5js9Z5xpXmxsRjOdmfP7wfPqwtWZ589xhqlUN2Y5Zi5mJmYi5lzMgZhdFbpavEb32sxsURSfq5mqrPPv52MexYxZrb4NIusoOgoiDudb/JiMGbZSWQSRbRSdBPEqZtQqZRdEllFU2rxPuB8zYI2yDSK7KNYKYinmlvURRG5RVNa4GW5aHUHkGEWrIKasjSByjWJ1EC+tjCByjqKy6qPVI1ZGEDlHUb4h7loXQeQeRSOILzF7rIsgco+iEcS0VRGEKFaCSB+znrQqghDFShDvrYkgRNEM4pk1EYQomkFctiaCEEUziDPWRBCiaAYxYk0EIYpmEIPWRBCiqAeBIEQhCEGIQhBsWxA9E4UNEYQoBCEIUQiC7giiq6OwIYIQhSAEIQpB0H1BdF0UNkQQohCEIEQhCLo7iFoUMZ8EgSC6JAobIghRCEIQohAEvRXEtkRhQwQhCkEIQhSCoHeD2LIobIggRCEIQYhCEPRHEP81ChsiCFEIQhCiEAT9F8SmR2FDBCEKQQhCFIKgv4PYlChsiCD6bZ7/SxQ2RBCiEIQgRCEI8gpiQ1HYEEGIQhCCEIUgyDeIjqOwIYIQhSAEIQpBsBLEKVGsHYUNcUuIQhCCMK2jsB2CEEUpCtshClOKwmYIwpSisBn5BjEqgj+jsBluCVMaWyEKIQiCUhCXhCAI3BKC4K9RXBeEIHBbCALvKwTBRuO4IQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyEi1Wh10ClBrYXd6jDgKqAVxMD3OOgqoBXE+PSYcBdSCuJIeM44CakHMpseco4BKpSiKDymI5Zgxx0Hmt8N4TDX9kjx0JGQexONyEPMxw46FTGPYF7NQDiKZdDRkGsSDRgTlIL7HHHU8ZBbD8ZjFVkEkr2MGHBOZxLAj5m05gNVBJNOOipzeSLcLIn0Me9tx0ecx3KnvetsgkiVR0Ocx/Gy1+GsF0bgppr2noI9C2BnzpNXN0EkQDW9ijjlOejyGEzHv2i17J0EkP2KmYvY6WnoshP31/3QWO1n0ToNoWKhfOeOOmi4P4XTM06Iovq5nwdcbxG/pm4Hp67IxV2MuxByKGfJSsMWLPxRzOOZizLWYF7GbHze6178AQI59RSRyAJkAAAAASUVORK5CYII=') no-repeat;
|
||||
background-size: cover;
|
||||
width: 57px;
|
||||
height: 74px;
|
||||
line-height: 90px;
|
||||
text-align: center;
|
||||
margin: 0 auto;
|
||||
color: #fff;
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
span.jFiler-icon-file i[class*="icon-jfi-"] {
|
||||
font-size: 24px;
|
||||
}
|
||||
|
||||
span.jFiler-icon-file.f-image {
|
||||
background-color: #e15955;
|
||||
}
|
||||
|
||||
span.jFiler-icon-file.f-video {
|
||||
background-color: #4183d7;
|
||||
}
|
||||
|
||||
span.jFiler-icon-file.f-audio {
|
||||
background-color: #5bab6e;
|
||||
}
|
||||
|
||||
/* Progress Bar */
|
||||
.jFiler-jProgressBar {
|
||||
height: 8px;
|
||||
background: #f1f1f1;
|
||||
margin-top: 3px;
|
||||
margin-bottom: 0;
|
||||
overflow: hidden;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.jFiler-jProgressBar .bar {
|
||||
float: left;
|
||||
width: 0;
|
||||
height: 100%;
|
||||
font-size: 12px;
|
||||
color: #ffffff;
|
||||
text-align: center;
|
||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
|
||||
background-color: #50A1E9;
|
||||
box-sizing: border-box;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
-webkit-transition: width 0.3s ease;
|
||||
-moz-transition: width 0.3s ease;
|
||||
-o-transition: width 0.3s ease;
|
||||
transition: width 0.3s ease;
|
||||
}
|
||||
|
||||
.jFiler-jProgressBar .bar.dark {
|
||||
background-color: #555;
|
||||
}
|
||||
|
||||
.jFiler-jProgressBar .bar.blue {
|
||||
background-color: #428bca;
|
||||
}
|
||||
|
||||
.jFiler-jProgressBar .bar.green {
|
||||
background-color: #5cb85c;
|
||||
}
|
||||
|
||||
.jFiler-jProgressBar .bar.orange {
|
||||
background-color: #f7a923;
|
||||
}
|
||||
|
||||
.jFiler-jProgressBar .bar.red {
|
||||
background-color: #d9534f;
|
||||
}
|
||||
|
||||
/* Thumbs */
|
||||
.jFiler-row:after,
|
||||
.jFiler-item:after {
|
||||
display: table;
|
||||
line-height: 0;
|
||||
content: "";
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.jFiler-items ul {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
/*-------------------------
|
||||
Default Theme
|
||||
-------------------------*/
|
||||
.jFiler-theme-default .jFiler-input {
|
||||
position: relative;
|
||||
display: block;
|
||||
width: 400px;
|
||||
height: 35px;
|
||||
margin: 0 0 15px 0;
|
||||
background: #fefefe;
|
||||
border: 1px solid #cecece;
|
||||
font-size: 12px;
|
||||
font-family: sans-serif;
|
||||
color: #888;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
overflow: hidden;
|
||||
-webkit-box-shadow: rgba(0,0,0,.25) 0 4px 5px -5px inset;
|
||||
-moz-box-shadow: rgba(0,0,0,.25) 0 4px 5px -5px inset;
|
||||
box-shadow: rgba(0,0,0,.25) 0 4px 5px -5px inset;
|
||||
}
|
||||
|
||||
.jFiler-theme-default .jFiler-input.focused {
|
||||
outline: none;
|
||||
-webkit-box-shadow: 0 0 7px rgba(0,0,0,0.1);
|
||||
-moz-box-shadow: 0 0 7px rgba(0,0,0,0.1);
|
||||
box-shadow: 0 0 7px rgba(0,0,0,0.1);
|
||||
}
|
||||
|
||||
.jFiler-theme-default .jFiler-input.dragged {
|
||||
border: 1px dashed #aaaaaa;
|
||||
background: #f9f9f9;
|
||||
}
|
||||
|
||||
.jFiler-theme-default .jFiler-inpu.draggedt:hover {
|
||||
background: #FFF8D0;
|
||||
}
|
||||
|
||||
.jFiler-theme-default .jFiler-input.dragged * {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.jFiler-theme-default .jFiler-input.dragged .jFiler-input-caption {
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.jFiler-theme-default .jFiler-input.dragged .jFiler-input-button {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.jFiler-theme-default .jFiler-input-caption {
|
||||
display: block;
|
||||
float: left;
|
||||
height: 100%;
|
||||
padding-top: 8px;
|
||||
padding-left: 10px;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.jFiler-theme-default .jFiler-input-button {
|
||||
display: block;
|
||||
float: right;
|
||||
height: 100%;
|
||||
padding-top: 8px;
|
||||
padding-left: 15px;
|
||||
padding-right: 15px;
|
||||
border-left: 1px solid #ccc;
|
||||
color: #666666;
|
||||
text-align: center;
|
||||
background-color: #fefefe;
|
||||
background-image: -webkit-gradient(linear,0 0,0 100%,from(#fefefe),to(#f1f1f1));
|
||||
background-image: -webkit-linear-gradient(top,#fefefe,#f1f1f1);
|
||||
background-image: -o-linear-gradient(top,#fefefe,#f1f1f1);
|
||||
background-image: linear-gradient(to bottom,#fefefe,#f1f1f1);
|
||||
background-image: -moz-linear-gradient(top,#fefefe,#f1f1f1);
|
||||
-webkit-transition: all .1s ease-out;
|
||||
-moz-transition: all .1s ease-out;
|
||||
-o-transition: all .1s ease-out;
|
||||
transition: all .1s ease-out;
|
||||
}
|
||||
|
||||
.jFiler-theme-default .jFiler-input-button:hover {
|
||||
-moz-box-shadow: inset 0 0 10px rgba(0,0,0,0.07);
|
||||
-webkit-box-shadow: inset 0 0 10px rgba(0,0,0,0.07);
|
||||
box-shadow: inset 0 0 10px rgba(0,0,0,0.07);
|
||||
}
|
||||
|
||||
.jFiler-theme-default .jFiler-input-button:active {
|
||||
background-image: -webkit-gradient(linear,0 0,0 100%,from(#f1f1f1),to(#fefefe));
|
||||
background-image: -webkit-linear-gradient(top,#f1f1f1,#fefefe);
|
||||
background-image: -o-linear-gradient(top,#f1f1f1,#fefefe);
|
||||
background-image: linear-gradient(to bottom,#f1f1f1,#fefefe);
|
||||
background-image: -moz-linear-gradient(top,#f1f1f1,#fefefe);
|
||||
}
|
||||
|
||||
/*-------------------------
|
||||
Thumbnails
|
||||
-------------------------*/
|
||||
.jFiler-items-default .jFiler-items {
|
||||
|
||||
}
|
||||
|
||||
.jFiler-items-default .jFiler-item {
|
||||
position: relative;
|
||||
padding: 16px;
|
||||
margin-bottom: 16px;
|
||||
background: #f7f7f7;
|
||||
color: #4d4d4c;
|
||||
}
|
||||
|
||||
|
||||
.jFiler-items-default .jFiler-item .jFiler-item-icon {
|
||||
font-size: 32px;
|
||||
color: #48A0DC;
|
||||
|
||||
margin-right: 15px;
|
||||
margin-top: -3px;
|
||||
}
|
||||
|
||||
.jFiler-items-default .jFiler-item .jFiler-item-title {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.jFiler-items-default .jFiler-item .jFiler-item-others {
|
||||
font-size: 12px;
|
||||
color: #777;
|
||||
margin-left: -5px;
|
||||
margin-right: -5px;
|
||||
}
|
||||
|
||||
.jFiler-items-default .jFiler-item .jFiler-item-others span {
|
||||
padding-left: 5px;
|
||||
padding-right: 5px;
|
||||
}
|
||||
|
||||
.jFiler-items-default .jFiler-item-assets {
|
||||
position: absolute;
|
||||
display: block;
|
||||
right: 16px;
|
||||
top: 50%;
|
||||
margin-top: -10px;
|
||||
}
|
||||
|
||||
.jFiler-items-default .jFiler-item-assets a {
|
||||
padding: 8px 9px 8px 12px;
|
||||
cursor: pointer;
|
||||
background: #fafafa;
|
||||
color: #777;
|
||||
border-radius: 4px;
|
||||
border: 1px solid #e3e3e3
|
||||
}
|
||||
|
||||
.jFiler-items-default .jFiler-item-assets .jFiler-item-trash-action:hover,
|
||||
.jFiler-items-default .jFiler-item-assets .jFiler-item-trash-action:active {
|
||||
color: #d9534f;
|
||||
}
|
||||
|
||||
.jFiler-items-default .jFiler-item-assets .jFiler-item-trash-action:active {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
/* Thumbnails: Grid */
|
||||
.jFiler-items-grid .jFiler-item {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.jFiler-items-grid .jFiler-item .jFiler-item-container {
|
||||
position: relative;
|
||||
margin: 0 20px 30px 0;
|
||||
padding: 10px;
|
||||
border: 1px solid #e1e1e1;
|
||||
border-radius: 3px;
|
||||
background: #fff;
|
||||
-webkit-box-shadow: 0px 0px 3px rgba(0,0,0,0.06);
|
||||
-moz-box-shadow: 0px 0px 3px rgba(0,0,0,0.06);
|
||||
box-shadow: 0px 0px 3px rgba(0,0,0,0.06);
|
||||
}
|
||||
|
||||
.jFiler-items-grid .jFiler-item .jFiler-item-container .jFiler-item-thumb {
|
||||
position: relative;
|
||||
width: 190px;
|
||||
height: 145px;
|
||||
min-height: 115px;
|
||||
border: 1px solid #e1e1e1;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.jFiler-items-grid .jFiler-item .jFiler-item-container .jFiler-item-thumb .jFiler-item-thumb-image {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.jFiler-item .jFiler-item-container .jFiler-item-thumb img {
|
||||
max-width: none;
|
||||
max-height: 100%;
|
||||
}
|
||||
|
||||
.jFiler-items-grid .jFiler-item .jFiler-item-container .jFiler-item-thumb span.jFiler-icon-file {
|
||||
margin-top: 32px;
|
||||
}
|
||||
|
||||
.jFiler-items-grid .jFiler-item-thumb-image.fi-loading {
|
||||
background: url('data:image/gif;base64,R0lGODlhIwAjAMQAAP////f39+/v7+bm5t7e3tbW1s7OzsXFxb29vbW1ta2traWlpZycnJSUlIyMjISEhHt7e3Nzc2tra2NjY1paWlJSUkpKSkJCQjo6OjExMSkpKRkZGRAQEAAAAP///wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFBAAeACwAAAAAIwAjAAAF5CAgjmRpnmiqrmzrvnAsz3Rto4Fwm4EYLIweQHcTKAiAQOPRI0QKRcYiEGA4qI8K9HZoGAIOSOBgCdIGBeLCMUgoBJSJjsBAxAiKRSFAQBCVBwMKGRsNQi8DBwsJhyQVGxMKjTCJk0kPjDI5AlQqBAcICFstBQqmmScFGh0dHBaWKAIEBQQDKQEKDxEQCTMBA5Y/o5oDoZYCHB1PMgIHCQacwCPACRStDTEDBrYABQg5wAgGIg4YYjQCogEGB3wI3J2+oD0G42PfN2Pc7D2JRDb/+In4t8MHwYIIEypcyLChQ4YhAAAh+QQFBAAeACwIAAgAEwATAAAFlqAnjiKSjAFJBscgLos4NIQ6JggAKLHXSDWbp6CoLRgeg0ShGwkIKQ9iITggPJFHaqA4eAYIRK0a9SwK0spl0TQkvEIJJnIlCdDCRk4lEJIGBgcHRn4jBBkciROFKgkNDg51jCJBJJU2ARocD4xNAQsGCBMcGz2FAxwZKQwVDYVwEhwOI02MAxsceJMeOgwaJ7skCX0jIQAh+QQFBAAeACwAAAAAAQABAAAFA6AXAgAh+QQFBAAeACwAAAAAAQABAAAFA6AXAgAh+QQFBAAeACwJAAcAEgAVAAAFjqAnjmJAnihgHChqCACAJKMyoMHBeggSJ40baoC4zTwFB6IlOiwLhkCDMUIYUAUSgiA4RCZLAXPkoDQOsfFosVNjDYaBQiRmWjaaDMTdXDAYbWMJQnwiGBoOBEwmIwVeGhhzKAJ+BBsXIgoSVCcEAxkbAw8enEwAARkaYqluAqliChlLY64aQrNjAT2MKCEAIfkEBQQAHgAsBwAIABQAFAAABZqgJ45jUQBkqorGgQqIsKqteCjyTLbAsBg6UoBA8CgSIoGhGGQNAoXG4zAaNBcPxalJQhS4KwGhUCQgRYHZQGKxVBpgD8CQUCiAYEQTpZpcGFYrBgw5HgkEBg4XFHoqFx10CwMZFCIIDwl8IwscFAQXGR4NGQo6BBocRRUYHgIWGEwqBxoPHgEWoYYXVCsBCTIBqzkHaVwHvCshACH5BAUEAB4ALAAAAAABAAEAAAUDoBcCACH5BAUEAB4ALAcACAAVABQAAAWaoCeOpDECZKqKgRcY7bqanoHI6+EKSIHjCJ2oMPidCgIPQbHwGUkIBoLwJAEM1OpqQBgkC0yjwBGRRBQokfdXOASzo0MjqTrQUwQIpwM/QSYJKQoaHRUKHgtQSgwTEUIeDRcPSRQcHgiBFREiB1IkdAkaEgMUGAILFoE4AxkaRRIVLRIURTIGGQ0iExWcEzQyBzGwI05PV78rIQAh+QQFBAAeACwAAAAAAQABAAAFA6AXAgAh+QQFBAAeACwHAAgAFAAUAAAFlaAnjmRBnmgqCip6kEGbDnJqvmJAsLVIDwgEoTc6JAy0k05VSIoKiSgipgoIaIFKZ8tBVBeNBgORkEwkDt6sYECSBosUwJRybDiqxuOgTmTwCAUKIwAHAwMJDw10CxUNMRIaBQcIAmhPCgYjVAcZDx4REx5lOCoWGCIPER4Bqi0FFwwiEBIxBg9DKpqpEVS5PQUFACohACH5BAUEAB4ALAAAAAABAAEAAAUDoBcCACH5BAUEAB4ALAcACAAUABQAAAWRoCeOpEGeaCoGKmqOQlvKXgId4usR6DA+HA6kQDsxMB0Nr0hSTHxFAgJxIABogpiEI9rgVAiF2ICARCANVovAjsESKoKaNGBkMqrEojA/WDYSHgMIJAVZBwsKSwoSCyIOFx4FJg4LVwQHRCgVDQIOEAEHDi9XJwISFAIADA4iDJ1xEwoiDa2SDFA0rCO5NGwtIQAh+QQFBAAeACwAAAAAAQABAAAFA6AXAgAh+QQFBAAeACwHAAgAEwAUAAAFj6AnisNonqeBLWg7GpwmtAENcc8s6ifyGKJMp1DyIFqNjecxUEiKLpGi4slATcBW4hkdDQ6HbHd048TELtah8XCwxqjAsXXdKSyWuuiAILwmGBBABzUiBDUFCQglCBAJIgsTBAQFAQpzAwZ1BREsCwweBQt+Lg8QNQpvCAqFJwMQc6mGjy6kHrI7cB4DeiIhACH5BAUEAB4ALAAAAAABAAEAAAUDoBcCACH5BAUEAB4ALAcABwASABUAAAWXoCeOI0GQaBpUl5CSRZV4QrYN71hoWBBkGpdISAI4No2BhoNLHRijy8YQmQwOpJMC2BAgIh5fgJZKSDYWYg4FWZMMhkLT7XHYeAW6wrBgLGZ0KQZjgR4IEhFqJIAeBQ8UDQUCeSNzIwcNCCIJDwMDJwgGawSZAQgzBAiWIwELDSIHmh6xOQyiAKciV4oeAHO0IwB0ArweIQAh+QQFBAAeACwAAAAAAQABAAAFA6AXAgAh+QQFBAAeACwHAAcAEAAVAAAFjKAnjuMwkKgnjFJVosSEeMGVrcc1j8TlehVMIIDh7EaMzMKDuTE4k4DHsCiIKJnCI0LYcE6ehMWyPDxGgshyZL5MUqID6uCAowsEwsouWlTGFAR8HgUJCglHgyNWigF0dXYzBAwPCoJgcAUKBnELAgKYcAObHgdyfIYiBQcAdgIJjAanrq0AsoojQyghACH5BAUEAB4ALAAAAAABAAEAAAUDoBcCACH5BAUEAB4ALAcACAAUABQAAAWYoCeKwQhF5aiqA3SIlDVW7yoOlCRKlVhtNZtHYUkIKBfPYoNaFRADUUTWeAwyGYHHAFmIDhIJImBorBIFB6cDSZUnEGEA08k0UiPDQrsSTB58HgEDhEIqAHgIERESVoY2BAcIBwaPlh5Rl04KCnhnKwMJDFCelgMIBAAeT3hBNqoeAggFIgiaX7ZblZoBB5lbqoG3wzbCKyEAIfkEBQQAHgAsBwAHABUAEwAABZygJ46jIJBoSjZPqa6GGEmBZ0zx60Gt90QiSSb3QkgOHskkkMj0UAOkyCEhLBiey2X0SIwMLKRVAPAEHggCY8N5egiKB6OGAmwtC1UhQScFIgt9JAKCKQUICQkxBw2NCycqBhsdlBgBAwUGBgRlKgMPExMSgSSdKmQvBAgIOqwoAgeKkDopBgMiMbOutCgGSLe8IlIeSKbBI1LAKCEAIfkEBQQAHgAsAAAAAAEAAQAABQOgFwIAIfkEBQQAHgAsAAAAAAEAAQAABQOgFwIAIfkECQQAHgAsAAAAACMAIwAABbWgJ45kaZ5oqq5s675wLM90baPBvS6MTgoKgqjxEBEihZuAsRAxHKJHJXk7NAwBB8RzsPRqBYFo4RgkFALKxMhAxAiKBdXtAXgah4Eis2nIBgcLCSgVGxMKNYAoD4MzAgI5KgQHCAhULQUKmgmRJgUaIhwWLwIEBQQDKQEKDxEQCXYxnSUBcjapKAIcHUg+JgkUHRx+YB6zIw4YEMc2QiMBzDB0HgbGvifR19rb3N3e3+Dh4ikhADs=') no-repeat center;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.jFiler-items-grid .jFiler-item .jFiler-item-container .jFiler-item-thumb-overlay {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
color: #fff;
|
||||
background: rgba(76, 76, 77, 0.8);
|
||||
opacity: 0;
|
||||
filter: alpha(opacity=0);
|
||||
z-index: 10;
|
||||
overflow-y: auto;
|
||||
-webkit-transition: all 0.12s;
|
||||
-moz-transition: all 0.12s;
|
||||
transition: all 0.12s;
|
||||
}
|
||||
|
||||
.jFiler-items-grid .jFiler-item .jFiler-item-container .jFiler-item-thumb:hover .jFiler-item-thumb-overlay {
|
||||
opacity: 1;
|
||||
filter: aplpha(opacity(100));
|
||||
}
|
||||
|
||||
.jFiler-items-grid .jFiler-item .jFiler-item-container .jFiler-item-info {
|
||||
display: table;
|
||||
padding: 0 10px;
|
||||
overflow: auto;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.jFiler-items-grid .jFiler-item .jFiler-item-container .jFiler-item-info .jFiler-item-title {
|
||||
display: block;
|
||||
font-weight: bold;
|
||||
word-break: break-all;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.jFiler-items-grid .jFiler-item .jFiler-item-container .jFiler-item-info .jFiler-item-others {
|
||||
display: inline-block;
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
.jFiler-items-grid .jFiler-item .jFiler-item-container .jFiler-item-assets {
|
||||
margin-top: 10px;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.jFiler-items-grid .jFiler-item .jFiler-item-container .jFiler-item-assets .text-success {
|
||||
color: #3C763D
|
||||
}
|
||||
|
||||
.jFiler-items-grid .jFiler-items-grid .jFiler-item .jFiler-item-container .jFiler-item-assets .text-error {
|
||||
color: #A94442
|
||||
}
|
||||
|
||||
.jFiler-items-grid .jFiler-item .jFiler-item-container .jFiler-item-assets .jFiler-jProgressBar {
|
||||
width: 120px;
|
||||
margin-left: -5px;
|
||||
}
|
||||
|
||||
.jFiler-items-grid .jFiler-item .jFiler-item-container .jFiler-item-assets .jFiler-item-others {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.jFiler-items-grid .jFiler-item-trash-action:hover {
|
||||
cursor: pointer;
|
||||
color: #d9534f;
|
||||
}
|
12
resources/css/jquery.justified.css
vendored
Normal file
|
@ -0,0 +1,12 @@
|
|||
.image-container{
|
||||
position: relative;
|
||||
}
|
||||
.photo-container{
|
||||
float: left;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
.image-thumb{
|
||||
position: relative;
|
||||
background-color: #eee;
|
||||
}
|
110
resources/css/justifiedGallery.min.css
vendored
Normal file
|
@ -0,0 +1,110 @@
|
|||
/*!
|
||||
* justifiedGallery - v3.8.0
|
||||
* http://miromannino.github.io/Justified-Gallery/
|
||||
* Copyright (c) 2020 Miro Mannino
|
||||
* Licensed under the MIT license.
|
||||
*/
|
||||
.justified-gallery {
|
||||
width: 100%;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
.justified-gallery > a,
|
||||
.justified-gallery > div,
|
||||
.justified-gallery > figure {
|
||||
position: absolute;
|
||||
display: inline-block;
|
||||
overflow: hidden;
|
||||
/* background: #888888; To have gray placeholders while the gallery is loading with waitThumbnailsLoad = false */
|
||||
filter: "alpha(opacity=10)";
|
||||
opacity: 0.1;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.justified-gallery > a > img,
|
||||
.justified-gallery > div > img,
|
||||
.justified-gallery > figure > img,
|
||||
.justified-gallery > a > a > img,
|
||||
.justified-gallery > div > a > img,
|
||||
.justified-gallery > figure > a > img,
|
||||
.justified-gallery > a > svg,
|
||||
.justified-gallery > div > svg,
|
||||
.justified-gallery > figure > svg,
|
||||
.justified-gallery > a > a > svg,
|
||||
.justified-gallery > div > a > svg,
|
||||
.justified-gallery > figure > a > svg {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: none;
|
||||
filter: "alpha(opacity=0)";
|
||||
opacity: 0;
|
||||
}
|
||||
.justified-gallery > a > .jg-caption,
|
||||
.justified-gallery > div > .jg-caption,
|
||||
.justified-gallery > figure > .jg-caption {
|
||||
display: none;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
padding: 5px;
|
||||
background-color: #000000;
|
||||
left: 0;
|
||||
right: 0;
|
||||
margin: 0;
|
||||
color: white;
|
||||
font-size: 12px;
|
||||
font-weight: 300;
|
||||
font-family: sans-serif;
|
||||
}
|
||||
.justified-gallery > a > .jg-caption.jg-caption-visible,
|
||||
.justified-gallery > div > .jg-caption.jg-caption-visible,
|
||||
.justified-gallery > figure > .jg-caption.jg-caption-visible {
|
||||
display: initial;
|
||||
filter: "alpha(opacity=70)";
|
||||
opacity: 0.7;
|
||||
-webkit-transition: opacity 500ms ease-in;
|
||||
-moz-transition: opacity 500ms ease-in;
|
||||
-o-transition: opacity 500ms ease-in;
|
||||
transition: opacity 500ms ease-in;
|
||||
}
|
||||
.justified-gallery > .jg-entry-visible {
|
||||
filter: "alpha(opacity=100)";
|
||||
opacity: 1;
|
||||
background: none;
|
||||
}
|
||||
.justified-gallery > .jg-entry-visible > img,
|
||||
.justified-gallery > .jg-entry-visible > a > img,
|
||||
.justified-gallery > .jg-entry-visible > svg,
|
||||
.justified-gallery > .jg-entry-visible > a > svg {
|
||||
filter: "alpha(opacity=100)";
|
||||
opacity: 1;
|
||||
-webkit-transition: opacity 500ms ease-in;
|
||||
-moz-transition: opacity 500ms ease-in;
|
||||
-o-transition: opacity 500ms ease-in;
|
||||
transition: opacity 500ms ease-in;
|
||||
}
|
||||
.justified-gallery > .jg-filtered {
|
||||
display: none;
|
||||
}
|
||||
.justified-gallery > .jg-spinner {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
margin-left: -24px;
|
||||
padding: 10px 0 10px 0;
|
||||
left: 50%;
|
||||
filter: "alpha(opacity=100)";
|
||||
opacity: 1;
|
||||
overflow: initial;
|
||||
}
|
||||
.justified-gallery > .jg-spinner > span {
|
||||
display: inline-block;
|
||||
filter: "alpha(opacity=0)";
|
||||
opacity: 0;
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
margin: 0 4px 0 4px;
|
||||
background-color: #000;
|
||||
border-radius: 6px;
|
||||
}
|
25
resources/css/public.css
vendored
Normal file
|
@ -0,0 +1,25 @@
|
|||
#img {
|
||||
background-image: url("/images/DSC08544.jpg");
|
||||
padding: 0px;
|
||||
margin: 0px;
|
||||
background-repeat: no-repeat;
|
||||
background-size: cover;
|
||||
height: 100%
|
||||
}
|
||||
#login {
|
||||
|
||||
margin: 0px;
|
||||
height: 100%;
|
||||
}
|
||||
.form-control {
|
||||
margin-bottom: 10px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
.vertical-center {
|
||||
margin: 0;
|
||||
position: absolute;
|
||||
width: calc(100% - 15px);
|
||||
top: 50%;
|
||||
-ms-transform: translateY(-50%);
|
||||
transform: translateY(-50%);
|
||||
}
|
7
resources/css/theme.css
vendored
Normal file
|
@ -0,0 +1,7 @@
|
|||
body {
|
||||
|
||||
}
|
||||
.form-control {
|
||||
margin-top: 5px;
|
||||
margin-bottom: 5px;
|
||||
}
|
191
resources/css/themes/jquery.filer-dragdropbox-theme.css
vendored
Normal file
|
@ -0,0 +1,191 @@
|
|||
/*!
|
||||
* CSS jQuery.filer
|
||||
* Theme: DragDropBox
|
||||
* Copyright (c) 2016 CreativeDream
|
||||
* Version: 1.3 (14-Sep-2016)
|
||||
*/
|
||||
|
||||
/*-------------------------
|
||||
Input
|
||||
-------------------------*/
|
||||
.jFiler-input-dragDrop {
|
||||
display: block;
|
||||
width: 343px;
|
||||
margin: 0 auto 25px auto;
|
||||
padding: 25px;
|
||||
color: #97A1A8;
|
||||
background: #F9FBFE;
|
||||
border: 2px dashed #C8CBCE;
|
||||
text-align: center;
|
||||
-webkit-transition: box-shadow 0.3s,
|
||||
border-color 0.3s;
|
||||
-moz-transition: box-shadow 0.3s,
|
||||
border-color 0.3s;
|
||||
transition: box-shadow 0.3s,
|
||||
border-color 0.3s;
|
||||
}
|
||||
|
||||
.jFiler .jFiler-input-dragDrop.dragged {
|
||||
border-color: #aaa;
|
||||
box-shadow: inset 0 0 20px rgba(0,0,0,.08);
|
||||
}
|
||||
|
||||
.jFiler .jFiler-input-dragDrop.dragged * {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.jFiler .jFiler-input-dragDrop.dragged .jFiler-input-icon {
|
||||
-webkit-transform: rotate(180deg);
|
||||
-ms-transform: rotate(180deg);
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
|
||||
.jFiler .jFiler-input-dragDrop.dragged .jFiler-input-text,
|
||||
.jFiler .jFiler-input-dragDrop.dragged .jFiler-input-choose-btn {
|
||||
filter: alpha(opacity=30);
|
||||
opacity: 0.3;
|
||||
}
|
||||
|
||||
.jFiler-input-dragDrop .jFiler-input-icon {
|
||||
font-size: 48px;
|
||||
margin-top: -10px;
|
||||
-webkit-transition: all 0.3s ease;
|
||||
-moz-transition: all 0.3s ease;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.jFiler-input-text h3 {
|
||||
margin: 0;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.jFiler-input-text span {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.jFiler-input-choose-btn {
|
||||
display: inline-block;
|
||||
padding: 8px 14px;
|
||||
outline: none;
|
||||
cursor: pointer;
|
||||
text-decoration: none;
|
||||
text-align: center;
|
||||
white-space: nowrap;
|
||||
font-size: 12px;
|
||||
font-weight: bold;
|
||||
color: #8d9496;
|
||||
border-radius: 3px;
|
||||
border: 1px solid #c6c6c6;
|
||||
vertical-align: middle;
|
||||
*background-color: #fff;
|
||||
box-shadow: 0px 1px 5px rgba(0,0,0,0.05);
|
||||
-webkit-transition: all 0.2s;
|
||||
-moz-transition: all 0.2s;
|
||||
transition: all 0.2s;
|
||||
}
|
||||
|
||||
.jFiler-input-choose-btn:hover,
|
||||
.jFiler-input-choose-btn:active {
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
.jFiler-input-choose-btn:active {
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
|
||||
/* gray */
|
||||
.jFiler-input-choose-btn.gray {
|
||||
background-image: -webkit-gradient(linear,0 0,0 100%,from(#fcfcfc),to(#f5f5f5));
|
||||
background-image: -webkit-linear-gradient(top,#fcfcfc,#f5f5f5);
|
||||
background-image: -o-linear-gradient(top,#fcfcfc,#f5f5f5);
|
||||
background-image: linear-gradient(to bottom,#fcfcfc,#f5f5f5);
|
||||
background-image: -moz-linear-gradient(top,#fcfcfc,#f5f5f5);
|
||||
}
|
||||
|
||||
.jFiler-input-choose-btn.gray:hover {
|
||||
filter: alpha(opacity=87);
|
||||
opacity: 0.87;
|
||||
}
|
||||
|
||||
.jFiler-input-choose-btn.gray:active {
|
||||
background-color: #f5f5f5;
|
||||
background-image: -webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#fcfcfc));
|
||||
background-image: -webkit-linear-gradient(top,#f5f5f5,#fcfcfc);
|
||||
background-image: -o-linear-gradient(top,#f5f5f5,#fcfcfc);
|
||||
background-image: linear-gradient(to bottom,#f5f5f5,#fcfcfc);
|
||||
background-image: -moz-linear-gradient(top,#f5f5f5,#fcfcfc);
|
||||
}
|
||||
|
||||
/* blue */
|
||||
.jFiler-input-choose-btn.blue {
|
||||
color: #48A0DC;
|
||||
border: 1px solid #48A0DC;
|
||||
}
|
||||
|
||||
.jFiler-input-choose-btn.blue:hover {
|
||||
background: #48A0DC;
|
||||
}
|
||||
|
||||
.jFiler-input-choose-btn.blue:active {
|
||||
background: #48A0DC;
|
||||
}
|
||||
|
||||
/* green */
|
||||
.jFiler-input-choose-btn.green {
|
||||
color: #27ae60;
|
||||
border: 1px solid #27ae60;
|
||||
}
|
||||
|
||||
.jFiler-input-choose-btn.green:hover {
|
||||
background: #27ae60;
|
||||
}
|
||||
|
||||
.jFiler-input-choose-btn.green:active {
|
||||
background: #27ae60;
|
||||
}
|
||||
|
||||
/* red */
|
||||
.jFiler-input-choose-btn.red {
|
||||
color: #ed5a5a;
|
||||
border: 1px solid #ed5a5a;
|
||||
}
|
||||
|
||||
.jFiler-input-choose-btn.red:hover {
|
||||
background: #ed5a5a;
|
||||
}
|
||||
|
||||
.jFiler-input-choose-btn.red:active {
|
||||
background: #E05252;
|
||||
}
|
||||
|
||||
/* black */
|
||||
.jFiler-input-choose-btn.black {
|
||||
color: #555;
|
||||
border: 1px solid #555;
|
||||
}
|
||||
|
||||
.jFiler-input-choose-btn.black:hover {
|
||||
background: #555;
|
||||
}
|
||||
|
||||
.jFiler-input-choose-btn.black:active {
|
||||
background: #333;
|
||||
}
|
||||
|
||||
.jFiler-input-choose-btn.blue:hover,
|
||||
.jFiler-input-choose-btn.green:hover,
|
||||
.jFiler-input-choose-btn.red:hover,
|
||||
.jFiler-input-choose-btn.black:hover {
|
||||
border-color: transparent;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.jFiler-input-choose-btn.blue:active,
|
||||
.jFiler-input-choose-btn.green:active,
|
||||
.jFiler-input-choose-btn.red:active,
|
||||
.jFiler-input-choose-btn.black:active {
|
||||
border-color: transparent;
|
||||
color: #fff;
|
||||
filter: alpha(opacity=87);
|
||||
opacity: 0.87;
|
||||
}
|
BIN
resources/images/DSC08544.jpg
Normal file
After Width: | Height: | Size: 237 KiB |
BIN
resources/images/lens-3114729_1920.jpg
Normal file
After Width: | Height: | Size: 499 KiB |
1
resources/js/app.js
vendored
|
@ -1 +0,0 @@
|
|||
require('./bootstrap');
|
7
resources/js/bootstrap.bundle.min.js
vendored
Normal file
28
resources/js/bootstrap.js
vendored
|
@ -1,28 +0,0 @@
|
|||
window._ = require('lodash');
|
||||
|
||||
/**
|
||||
* We'll load the axios HTTP library which allows us to easily issue requests
|
||||
* to our Laravel back-end. This library automatically handles sending the
|
||||
* CSRF token as a header based on the value of the "XSRF" token cookie.
|
||||
*/
|
||||
|
||||
window.axios = require('axios');
|
||||
|
||||
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
|
||||
|
||||
/**
|
||||
* Echo exposes an expressive API for subscribing to channels and listening
|
||||
* for events that are broadcast by Laravel. Echo and event broadcasting
|
||||
* allows your team to easily build robust real-time web applications.
|
||||
*/
|
||||
|
||||
// import Echo from 'laravel-echo';
|
||||
|
||||
// window.Pusher = require('pusher-js');
|
||||
|
||||
// window.Echo = new Echo({
|
||||
// broadcaster: 'pusher',
|
||||
// key: process.env.MIX_PUSHER_APP_KEY,
|
||||
// cluster: process.env.MIX_PUSHER_APP_CLUSTER,
|
||||
// forceTLS: true
|
||||
// });
|
2
resources/js/jquery-3.5.1.min.js
vendored
Normal file
2
resources/js/jquery-3.5.1.slim.min.js
vendored
Normal file
1113
resources/js/jquery.filer.js
vendored
Normal file
8
resources/js/jquery.filer.min.js
vendored
Normal file
1606
resources/js/jquery.fileupload.js
vendored
Normal file
1
resources/js/jquery.justified.min.js
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
!function(t,i,h,e){"use strict";function o(i,h){this.element=i,this.$el=t(i),this._name=s,this.init(h)}var s="justifiedImages";o.prototype={defaults:{template:function(t){return'<div class="photo-container" style="height:'+t.displayHeight+"px;margin-right:"+t.marginRight+'px;"><img class="image-thumb" src="'+t.src+'" style="width:'+t.displayWidth+"px;height:"+t.displayHeight+'px;" ></div>'},appendBlocks:function(){return[]},rowHeight:150,maxRowHeight:350,handleResize:!1,margin:1,imageSelector:"image-thumb",imageContainer:"photo-container"},init:function(i){this.options=t.extend({},this.defaults,i),this.displayImages(),this.options.handleResize&&this.handleResize()},getBlockInRow:function(t){for(var i=this.options.appendBlocks(),h=0;h<i.length;h++){var e=i[h];if(e.rowNum===t)return e}},displayImages:function(){var i=this,h=[],e=0,o=0,s=this.options.images.length,n=this.options.images,a=[],r=0,p=this.options.appendBlocks(),l=this.$el.width(),d=parseInt(this.options.margin,10),g=this.$el,c=parseInt(this.options.rowHeight,10);t.each(this.options.images,function(t,e){var o=i.options.getSize(e),s=parseInt(o.width,10),n=parseInt(o.height,10);n!==c&&(s=Math.floor(s*(c/n))),r+=s,h.push(s)}),t.each(p,function(t,i){r+=i.width});var m=r/Math.ceil(r/l);console.log("rows",Math.ceil(r/l));for(var f=0;s>o;){var w={width:0,photos:[]},u=0,v=this.getBlockInRow(a.length+1);for(v&&(w.width+=v.width,f+=v.width);f+h[o+u]/2<=m*(a.length+1)&&s>o+u;)f+=h[o+u],w.width+=h[o+u],w.photos.push({width:h[o+u],photo:n[o+u]}),u++;o+=u,a.push(w)}console.log(a.length,a);for(var y=0;y<a.length;y++){var w=a[y],R=!1;if(e=y+1,this.options.maxRows&&e>this.options.maxRows)break;y===a.length-1&&(R=!0),f=-1*d;var I=this.getBlockInRow(R?-1:e),x=l;I&&(x-=I.width,f=0);var b=x/w.width,u=w.photos.length,k=Math.min(Math.floor(c*b),parseInt(this.options.maxRowHeight,10));b=k/this.options.rowHeight;var H=t("<div/>",{"class":"picrow"});H.height(k+d),g.append(H);for(var M="",B=0;B<w.photos.length;B++){var j=w.photos[B].photo,z=Math.floor(w.photos[B].width*b);f+=z+d,M+=this.renderPhoto(j,{src:this.options.thumbnailPath(j,z,k),width:z,height:k},I?!1:B===w.photos.length-1)}if(""!==M){if(H.html(M),Math.abs(f-x)<.05*x){for(var C=0;x>f;){var S=H.find("."+this.options.imageContainer+":nth-child("+(C+1)+")"),$=S.find("."+this.options.imageSelector);$.width($.width()+1),C=(C+1)%u,f++}for(C=0;f>x;){var P=H.find("."+this.options.imageContainer+":nth-child("+(C+1)+")"),_=P.find("."+this.options.imageSelector);_.width(_.width()-1),C=(C+1)%u,f--}}else if(x-f>.05*x)for(var O=x-f,W=0,q=H.find("."+this.options.imageContainer),A=0,N=0;N<q.length;N++){var Q=O/q.length,T=q.eq(N),D=T.find("."+this.options.imageSelector),E=D.width(),F=D.height();y===q.length-1&&(Q=O-W),D.width(E+Q),D.height(F/E*(E+Q)),A=(F-D.height())/2,D.css("margin-top",A),W+=Q}I&&t("<div />",{"class":this.options.imageContainer+" added-block",css:{width:I.width,height:k},html:I.html}).appendTo(H)}else H.remove()}},renderPhoto:function(i,h,e){var o={},s;return s=t.extend({},i,{src:h.src,displayWidth:h.width,displayHeight:h.height,marginRight:e?0:this.options.margin}),this.options.dataObject?o[this.options.dataObject]=s:o=s,this.options.template(o)},handleResize:function(){},refresh:function(i){this.options=t.extend({},this.defaults,i),this.$el.empty(),this.displayImages()}},t.fn[s]=function(i){var h=arguments,e;return this.each(function(){var n=t(this),a=t.data(this,"plugin_"+s),r="object"==typeof i&&i;a?"string"==typeof i?e=a[i].apply(a,Array.prototype.slice.call(h,1)):a.refresh.call(a,r):n.data("plugin_"+s,a=new o(this,r))}),e||this}}(jQuery,window,document);
|
8
resources/js/jquery.justifiedGallery.min.js
vendored
Normal file
43
resources/views/account/app.blade.php
Normal file
|
@ -0,0 +1,43 @@
|
|||
<head>
|
||||
<link rel="stylesheet" href="/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="/css/theme.css">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
</head>
|
||||
<body>
|
||||
<div class="wrapper">
|
||||
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
|
||||
<a class="navbar-brand" href="#">Kuvia</a>
|
||||
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarColor02" aria-controls="navbarColor02" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
|
||||
<div class="collapse navbar-collapse" id="navbarColor02">
|
||||
<ul class="navbar-nav mr-auto">
|
||||
<li class="nav-item active">
|
||||
<a class="nav-link" href="/d">Dashboard</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="/g">Gallery</a>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="nav navbar-nav float-md-right">
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">Tenant</a>
|
||||
<div class="dropdown-menu dropdown-menu-right">
|
||||
<a class="dropdown-item" href="#">Sample</a>
|
||||
<a class="dropdown-item" href="#">FooBar Bla</a>
|
||||
<a class="dropdown-item" href="#">Something else here</a>
|
||||
<div class="dropdown-divider"></div>
|
||||
<a class="dropdown-item" href="#">New Tenant</a>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
</div>
|
||||
|
||||
<script src="/js/jquery-3.5.1.slim.min.js"></script>
|
||||
<script src="/js/bootstrap.bundle.min.js"></script>
|
||||
</body>
|
27
resources/views/account/login.blade.php
Normal file
|
@ -0,0 +1,27 @@
|
|||
<head>
|
||||
<link rel="stylesheet" href="/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="/css/public.css">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
</head>
|
||||
<body>
|
||||
<div class="row" style="height: 100%;width: 100%;">
|
||||
<div class="col-md-9" id="img" >
|
||||
|
||||
</div>
|
||||
<div class="col-md-3" id="login" >
|
||||
<div class="vertical-center">
|
||||
<h3>Login</h3>
|
||||
<form method="post" style="margin-top: 20px;">
|
||||
@csrf
|
||||
<input name="username" value="{{ old('username') }}" class="form-control" placeholder="Username">
|
||||
<input name="password" type="password" class="form-control" placeholder="Password">
|
||||
<input type="submit" class="btn btn-outline-success" style="width: 100%" value="Login">
|
||||
<a style="float: right;" href="/register">Register</a>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="/js/jquery-3.5.1.slim.min.js"></script>
|
||||
<script src="/js/bootstrap.bundle.min.js"></script>
|
||||
</body>
|
38
resources/views/account/register.blade.php
Normal file
|
@ -0,0 +1,38 @@
|
|||
<head>
|
||||
<link rel="stylesheet" href="/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="/css/public.css">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
</head>
|
||||
<body>
|
||||
<div class="row" style="height: 100%;width: 100%;">
|
||||
<div class="col-md-9" id="img" >
|
||||
|
||||
</div>
|
||||
<div class="col-md-3" id="login" >
|
||||
<div class="vertical-center">
|
||||
<h3>Register</h3>
|
||||
@if ($errors->any())
|
||||
<div class="alert alert-danger">
|
||||
<ul>
|
||||
@foreach ($errors->all() as $error)
|
||||
<li>{{ $error }}</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
@endif
|
||||
<form method="post" style="margin-top: 20px;">
|
||||
@csrf
|
||||
<input name="username" value="{{ old('username') }}" class="form-control" placeholder="Username">
|
||||
<input name="email" value="{{ old('email') }}" type="email" class="form-control" placeholder="E-Mail">
|
||||
<input name="password" type="password" class="form-control" placeholder="Password">
|
||||
<input name="password_confirmation" type="password" class="form-control" placeholder="Password (Again)">
|
||||
<input type="submit" class="btn btn-outline-success" style="width: 100%" value="Register">
|
||||
<a style="float: right;" href="/login">Login</a>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="/js/jquery-3.5.1.slim.min.js"></script>
|
||||
<script src="/js/bootstrap.bundle.min.js"></script>
|
||||
</body>
|
101
resources/views/dashboard/index.blade.php
Normal file
|
@ -0,0 +1,101 @@
|
|||
@extends('layout/template')
|
||||
|
||||
@section('content')
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<h1>Dashboard</h1>
|
||||
<div class="alert alert-danger" role="alert">
|
||||
This system is in development mode, all data will be removed!
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-8">
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div class="card bg-secondary" style="">
|
||||
<div class="card-header">Storage</div>
|
||||
<div class="card-body">
|
||||
<canvas id="storageChart" width="200" height="100"></canvas>
|
||||
<p class="card-text">Currently you use {{ $currentSize }} of Storage.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="card bg-secondary">
|
||||
<div class="card-header">Traffic</div>
|
||||
<div class="card-body">
|
||||
<canvas id="myChart" width="200" height="100"></canvas>
|
||||
<p class="card-text">In the last 24 Hours you use {{ $currentTraffic }} Traffic, this month you used already {{ $monthlyTraffic }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
FAQ
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@endsection
|
||||
|
||||
@section('js')
|
||||
<script src="https://cdn.jsdelivr.net/npm/chart.js@2.9.4/dist/Chart.min.js"></script>
|
||||
<script>
|
||||
var data = {
|
||||
labels: [@foreach($lastDaysTreffic as $date => $traffic)
|
||||
"{{ $date }}",
|
||||
@endforeach],
|
||||
datasets: [
|
||||
{
|
||||
label: "Traffic per Day",
|
||||
fillColor: "rgba(220,220,220,0.2)",
|
||||
strokeColor: "rgba(220,220,220,1)",
|
||||
pointColor: "rgba(220,220,220,1)",
|
||||
pointStrokeColor: "#fff",
|
||||
pointHighlightFill: "#fff",
|
||||
pointHighlightStroke: "rgba(220,220,220,1)",
|
||||
data: [
|
||||
@foreach($lastDaysTreffic as $traffic)
|
||||
{{ $traffic }},
|
||||
@endforeach
|
||||
]
|
||||
}
|
||||
]
|
||||
};
|
||||
var ctx = document.getElementById('myChart').getContext('2d');
|
||||
var myChart = new Chart(ctx, {
|
||||
type: 'line',
|
||||
data: data
|
||||
});
|
||||
|
||||
var datastorage = {
|
||||
labels: [@foreach($lastDaysSize as $date => $traffic)
|
||||
"{{ $date }}",
|
||||
@endforeach],
|
||||
datasets: [
|
||||
{
|
||||
label: "Storage per Day",
|
||||
fillColor: "rgba(220,220,220,0.2)",
|
||||
strokeColor: "rgba(220,220,220,1)",
|
||||
pointColor: "rgba(220,220,220,1)",
|
||||
pointStrokeColor: "#fff",
|
||||
pointHighlightFill: "#fff",
|
||||
pointHighlightStroke: "rgba(220,220,220,1)",
|
||||
data: [
|
||||
@foreach($lastDaysSize as $traffic)
|
||||
{{ $traffic }},
|
||||
@endforeach
|
||||
]
|
||||
}
|
||||
]
|
||||
};
|
||||
var ctxstorage = document.getElementById('storageChart').getContext('2d');
|
||||
var myChartstorage = new Chart(ctxstorage, {
|
||||
type: 'line',
|
||||
data: datastorage
|
||||
});
|
||||
</script>
|
||||
@endsection
|
45
resources/views/gallery/index.blade.php
Normal file
|
@ -0,0 +1,45 @@
|
|||
@extends('layout/template')
|
||||
|
||||
@section('content')
|
||||
<a href="/g/new" class="btn btn-outline-success" style="float: right;">New Gallery</a>
|
||||
<h1>Gallery</h1>
|
||||
<div style="clear: both; margin-bottom: 10px;"></div>
|
||||
<div class="col-md-12">
|
||||
<table class="table table-striped">
|
||||
<tr>
|
||||
<th>#</th>
|
||||
<th>Preview</th>
|
||||
<th>Name</th>
|
||||
<th>Create Date</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
@foreach($galleries as $gallery)
|
||||
<tr>
|
||||
<td>{{ $gallery->id }}</td>
|
||||
<td style="padding-top:5px;padding-bottom: 5px;">
|
||||
@if($gallery->main_image == null)
|
||||
<img src="/images/lens-3114729_1920.jpg" height="87px;">
|
||||
@else
|
||||
<img src="/{{ $tenant->url }}/{{ $gallery->url }}/{{ $gallery->main_image }}/file?size=small" height="87px;">
|
||||
@endif
|
||||
|
||||
</td>
|
||||
<td>{{ $gallery->name }}</td>
|
||||
<td>{{ $gallery->gallery_create_time }}</td>
|
||||
<td>
|
||||
<div class="dropdown">
|
||||
<button class="btn btn-primary dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
Actions
|
||||
</button>
|
||||
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
|
||||
<a class="dropdown-item" href="/g/{{$gallery->url}}/upload">Upload Images</a>
|
||||
<a class="dropdown-item" href="#">Bilder</a>
|
||||
<a class="dropdown-item" href="#">Delete</a>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</table>
|
||||
</div>
|
||||
@endsection
|
44
resources/views/gallery/new.blade.php
Normal file
|
@ -0,0 +1,44 @@
|
|||
@extends('layout/template')
|
||||
|
||||
@section('content')
|
||||
<h1>Gallery</h1>
|
||||
<div style="clear: both; margin-bottom: 10px;"></div>
|
||||
@if ($errors->any())
|
||||
<div class="alert alert-danger">
|
||||
<ul>
|
||||
@foreach ($errors->all() as $error)
|
||||
<li>{{ $error }}</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
@endif
|
||||
<div class="col-md-12">
|
||||
<form method="post">
|
||||
@csrf
|
||||
<input name="name" value="{{ old('name') }}" placeholder="Name" class="form-control">
|
||||
<textarea name="description" value="{{ old('description') }}" placeholder="Description" class="form-control"></textarea>
|
||||
|
||||
|
||||
<div class="accordion" id="accordionExample">
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header" id="headingTwo">
|
||||
<h2 class="mb-0">
|
||||
<button class="btn btn-link btn-block text-left collapsed" type="button" data-toggle="collapse" data-target="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo">
|
||||
Advanced Settings
|
||||
</button>
|
||||
</h2>
|
||||
</div>
|
||||
<div id="collapseTwo" class="collapse" aria-labelledby="headingTwo" data-parent="#accordionExample">
|
||||
<div class="card-body">
|
||||
<input name="date" value="{{ old('date') }}" class="form-control" placeholder="Create Date (yyyy-mm-dd, today if empty)">
|
||||
<input name="url" value="{{ old('url') }}" placeholder="URL" class="form-control">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<input type="submit" class="btn btn-outline-success" value="Create" style="margin-top: 10px;">
|
||||
</form>
|
||||
</div>
|
||||
@endsection
|
49
resources/views/gallery/upload.blade.php
Normal file
|
@ -0,0 +1,49 @@
|
|||
@extends('layout/template')
|
||||
|
||||
@section('content')
|
||||
<h1>Images</h1>
|
||||
<p>Add Images to your gallery</p>
|
||||
<div class="col-md-12">
|
||||
<form action="php/upload.html" method="post" enctype="multipart/form-data">
|
||||
<input type="file" name="files[]" id="filer_input" multiple="multiple">
|
||||
|
||||
</form>
|
||||
<a href="#" class="btn btn-outline-success">Publish Gallery</a>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
|
||||
|
||||
@section('js')
|
||||
<link href="/css/jquery.filer.css" type="text/css" rel="stylesheet" />
|
||||
<link href="/css/themes/jquery.filer-dragdropbox-theme.css" type="text/css" rel="stylesheet" />
|
||||
|
||||
|
||||
<script src="/js/jquery.filer.min.js"></script>
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$('#filer_input').filer({
|
||||
addMore: true,
|
||||
showThumbs: true,
|
||||
fileMaxSize: 10,
|
||||
uploadFile: {
|
||||
url: null, //URL to which the request is sent {String}
|
||||
data: null, //Data to be sent to the server {Object}
|
||||
type: 'POST', //The type of request {String}
|
||||
enctype: 'multipart/form-data', //Request enctype {String}
|
||||
synchron: false, //Upload synchron the files
|
||||
beforeSend: null, //A pre-request callback function {Function}
|
||||
success: null, //A function to be called if the request succeeds {Function}
|
||||
error: null, //A function to be called if the request fails {Function}
|
||||
statusCode: null, //An object of numeric HTTP codes {Object}
|
||||
onProgress: null, //A function called while uploading file with progress percentage {Function}
|
||||
onComplete: null, //A function called when all files were uploaded {Function}
|
||||
},
|
||||
onRemove: function () {
|
||||
alert("ToDo this feature dont work");
|
||||
return false;
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@endsection
|
53
resources/views/layout/template.blade.php
Normal file
|
@ -0,0 +1,53 @@
|
|||
<head>
|
||||
<link rel="stylesheet" href="/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="/css/theme.css">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
</head>
|
||||
<body>
|
||||
<div class="wrapper">
|
||||
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
|
||||
<a class="navbar-brand" href="#">Kuvia</a>
|
||||
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarColor02" aria-controls="navbarColor02" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
|
||||
<div class="collapse navbar-collapse" id="navbarColor02">
|
||||
@auth
|
||||
<ul class="navbar-nav mr-auto">
|
||||
<li class="nav-item active">
|
||||
<a class="nav-link" href="/d">Dashboard</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="/g">Gallery</a>
|
||||
</li>
|
||||
</ul>
|
||||
@endauth
|
||||
<ul class="nav navbar-nav float-md-right">
|
||||
@auth
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">Tenant</a>
|
||||
<div class="dropdown-menu dropdown-menu-right">
|
||||
@foreach($user_tenants as $tenant)
|
||||
<a class="dropdown-item" href="/t/select/{{ $tenant->url }}">{{ $tenant->name }}</a>
|
||||
@endforeach
|
||||
<div class="dropdown-divider"></div>
|
||||
<a class="dropdown-item" href="/t/new">New Tenant</a>
|
||||
</div>
|
||||
</li>
|
||||
@endauth
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<div class="container-fluid" style="margin-top: 20px;">
|
||||
@yield('content')
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script src="/js/jquery-3.5.1.min.js"></script>
|
||||
<script src="/js/bootstrap.bundle.min.js"></script>
|
||||
@yield('js')
|
||||
</body>
|
|
@ -1,102 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<title>AdminLTE 2 | Registration Page</title>
|
||||
<!-- Tell the browser to be responsive to screen width -->
|
||||
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
|
||||
<!-- Bootstrap 3.3.7 -->
|
||||
<link rel="stylesheet" href="../../bower_components/bootstrap/dist/css/bootstrap.min.css">
|
||||
<!-- Font Awesome -->
|
||||
<link rel="stylesheet" href="../../bower_components/font-awesome/css/font-awesome.min.css">
|
||||
<!-- Ionicons -->
|
||||
<link rel="stylesheet" href="../../bower_components/Ionicons/css/ionicons.min.css">
|
||||
<!-- Theme style -->
|
||||
<link rel="stylesheet" href="/assets/css/adminlte.min.css">
|
||||
<!-- iCheck -->
|
||||
<link rel="stylesheet" href="../../plugins/iCheck/square/blue.css">
|
||||
|
||||
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
||||
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
|
||||
<!--[if lt IE 9]>
|
||||
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
|
||||
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
|
||||
<![endif]-->
|
||||
|
||||
<!-- Google Font -->
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,300italic,400italic,600italic">
|
||||
</head>
|
||||
<body class="hold-transition register-page">
|
||||
<div class="register-box">
|
||||
<div class="register-logo">
|
||||
<a href="../../index2.html"><b>Admin</b>LTE</a>
|
||||
</div>
|
||||
|
||||
<div class="register-box-body">
|
||||
<p class="login-box-msg">Register a new membership</p>
|
||||
|
||||
<form action="../../index.html" method="post">
|
||||
<div class="form-group has-feedback">
|
||||
<input type="text" class="form-control" placeholder="Full name">
|
||||
<span class="glyphicon glyphicon-user form-control-feedback"></span>
|
||||
</div>
|
||||
<div class="form-group has-feedback">
|
||||
<input type="email" class="form-control" placeholder="Email">
|
||||
<span class="glyphicon glyphicon-envelope form-control-feedback"></span>
|
||||
</div>
|
||||
<div class="form-group has-feedback">
|
||||
<input type="password" class="form-control" placeholder="Password">
|
||||
<span class="glyphicon glyphicon-lock form-control-feedback"></span>
|
||||
</div>
|
||||
<div class="form-group has-feedback">
|
||||
<input type="password" class="form-control" placeholder="Retype password">
|
||||
<span class="glyphicon glyphicon-log-in form-control-feedback"></span>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-xs-8">
|
||||
<div class="checkbox icheck">
|
||||
<label>
|
||||
<input type="checkbox"> I agree to the <a href="#">terms</a>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
<div class="col-xs-4">
|
||||
<button type="submit" class="btn btn-primary btn-block btn-flat">Register</button>
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div class="social-auth-links text-center">
|
||||
<p>- OR -</p>
|
||||
<a href="#" class="btn btn-block btn-social btn-facebook btn-flat"><i class="fa fa-facebook"></i> Sign up using
|
||||
Facebook</a>
|
||||
<a href="#" class="btn btn-block btn-social btn-google btn-flat"><i class="fa fa-google-plus"></i> Sign up using
|
||||
Google+</a>
|
||||
</div>
|
||||
|
||||
<a href="login.html" class="text-center">I already have a membership</a>
|
||||
</div>
|
||||
<!-- /.form-box -->
|
||||
</div>
|
||||
<!-- /.register-box -->
|
||||
|
||||
<!-- jQuery 3 -->
|
||||
<script src="../../bower_components/jquery/dist/jquery.min.js"></script>
|
||||
<!-- Bootstrap 3.3.7 -->
|
||||
<script src="../../bower_components/bootstrap/dist/js/bootstrap.min.js"></script>
|
||||
<!-- iCheck -->
|
||||
<script src="../../plugins/iCheck/icheck.min.js"></script>
|
||||
<script>
|
||||
$(function () {
|
||||
$('input').iCheck({
|
||||
checkboxClass: 'icheckbox_square-blue',
|
||||
radioClass: 'iradio_square-blue',
|
||||
increaseArea: '20%' /* optional */
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
34
resources/views/tenant/new.blade.php
Normal file
|
@ -0,0 +1,34 @@
|
|||
@extends('layout/template')
|
||||
|
||||
@section('content')
|
||||
<h1>New Tenant</h1>
|
||||
@if ($errors->any())
|
||||
<div class="alert alert-danger">
|
||||
<ul>
|
||||
@foreach ($errors->all() as $error)
|
||||
<li>{{ $error }}</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
@endif
|
||||
<form method="post">
|
||||
<p>A Tenant contains a URL which can be called its www.kuvia.cloud/yourURL. Each Tenant is get seperate information about used space and used traffic.</p>
|
||||
<p>Your default Tenant is the same like your username. You can create unlimited tenants.</p>
|
||||
@csrf
|
||||
<input class="form-control" value="{{ old('name') }}" name="name" placeholder="Name">
|
||||
<input class="form-control" value="{{ old('url') }}" name="url" placeholder="URL">
|
||||
<input type="submit" class="btn btn-outline-success" value="Create">
|
||||
</form>
|
||||
<div class="alert alert-dismissible alert-info">
|
||||
<p>Idears for later:</p>
|
||||
<ul>
|
||||
<li>Tenants without url, just access via api</li>
|
||||
<li>Private Tenants</li>
|
||||
<li>Themes per Tenant</li>
|
||||
<li>Multi users per tenant</li>
|
||||
<li>Disabled Tenants for default user, they just get one when register, less confusion</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@endsection
|
||||
|
28
resources/views/themes/gallery/default/list.blade.php
Normal file
|
@ -0,0 +1,28 @@
|
|||
@extends('layout/template')
|
||||
|
||||
@section('content')
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<h1>Galleries {{ $gallery->name }}</h1>
|
||||
|
||||
<div id="mygallery">
|
||||
@foreach($images as $image)
|
||||
<a href="/{{ $tenant->url }}/{{ $gallery->url }}/{{ $image->id }}/file">
|
||||
<img style="height: 200px;" alt="{{ $image->filename }}" src="/{{ $tenant->url }}/{{ $gallery->url }}/{{ $image->id }}/file"/>
|
||||
</a>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@endsection
|
||||
|
||||
@section('js')
|
||||
<link rel="stylesheet" href="/css/jquery.justified.css" />
|
||||
<script src="/js/jquery.justified.min.js"></script>
|
||||
<script>
|
||||
$("#mygallery").justifiedGallery({
|
||||
rowHeight: 120,
|
||||
});
|
||||
</script>
|
||||
@endsection
|
10
resources/views/themes/tenant/default/list.blade.php
Normal file
|
@ -0,0 +1,10 @@
|
|||
@extends('layout/template')
|
||||
|
||||
@section('content')
|
||||
<h1>Galleries</h1>
|
||||
@foreach($galleries as $gallery)
|
||||
<ul>
|
||||
<li><a href="/{{ $tenant->url }}/{{ $gallery->url }}">{{ $gallery->name }}</a></li>
|
||||
</ul>
|
||||
@endforeach
|
||||
@endsection
|
|
@ -2,6 +2,8 @@
|
|||
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Web Routes
|
||||
|
@ -13,6 +15,37 @@ use Illuminate\Support\Facades\Route;
|
|||
|
|
||||
*/
|
||||
|
||||
Route::get('/', function () {
|
||||
return view('public.register');
|
||||
$middlewareGroups = [
|
||||
'private' => [
|
||||
\App\Http\Middleware\TenanMiddleware::class
|
||||
],
|
||||
|
||||
];
|
||||
|
||||
Route::get("/register", [\App\Http\Controllers\AccountController::class, 'registerView']);
|
||||
Route::post("/register", [\App\Http\Controllers\AccountController::class, 'register']);
|
||||
Route::get("/login", [\App\Http\Controllers\AccountController::class, 'loginView']);
|
||||
Route::post("/login", [\App\Http\Controllers\AccountController::class, 'login']);
|
||||
|
||||
Route::middleware([\App\Http\Middleware\TenanMiddleware::class])->group(function () {
|
||||
Route::get("/d", [\App\Http\Controllers\DashboardController::class, 'dashboardView']);
|
||||
|
||||
Route::get("/t/new", [\App\Http\Controllers\TenantController::class, 'newView']);
|
||||
Route::post("/t/new", [\App\Http\Controllers\TenantController::class, 'newTenant']);
|
||||
Route::get("/t/select/{name}", [\App\Http\Controllers\TenantController::class, 'switchTenant']);
|
||||
|
||||
Route::get("/g", [\App\Http\Controllers\GalleryController::class, 'listView']);
|
||||
Route::get("/g/new", [\App\Http\Controllers\GalleryController::class, 'newView']);
|
||||
Route::post("/g/new", [\App\Http\Controllers\GalleryController::class, 'newGallery']);
|
||||
Route::get("/g/{url}/upload", [\App\Http\Controllers\GalleryController::class, 'imagesUploadView']);
|
||||
Route::post("/g/{url}/upload", [\App\Http\Controllers\GalleryController::class, 'imageUpload']);
|
||||
});
|
||||
|
||||
Route::get("/{name}", [\App\Http\Controllers\PublicController::class, 'listGalleriesView'])->middleware([\App\Http\Middleware\TenanMiddleware::class]);
|
||||
Route::get("/{tenant}/{gallery}", [\App\Http\Controllers\PublicController::class, 'listGalleryImagesView'])->middleware([\App\Http\Middleware\TenanMiddleware::class]);
|
||||
Route::get("/{tenant}/{gallery}/{image}/file", [\App\Http\Controllers\PublicController::class, 'returnImageFile']);
|
||||
|
||||
|
||||
Route::get('/', function () {
|
||||
return redirect("/login");
|
||||
});
|
||||
|
|
BIN
storage/cache/cache_1_1_10_big
vendored
Normal file
After Width: | Height: | Size: 236 KiB |
BIN
storage/cache/cache_1_1_10_medium
vendored
Normal file
After Width: | Height: | Size: 60 KiB |
BIN
storage/cache/cache_1_1_10_orginal
vendored
Normal file
After Width: | Height: | Size: 347 KiB |
BIN
storage/cache/cache_1_1_10_small
vendored
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
storage/cache/cache_1_1_11_big
vendored
Normal file
After Width: | Height: | Size: 222 KiB |
BIN
storage/cache/cache_1_1_11_medium
vendored
Normal file
After Width: | Height: | Size: 57 KiB |
BIN
storage/cache/cache_1_1_11_orginal
vendored
Normal file
After Width: | Height: | Size: 338 KiB |
BIN
storage/cache/cache_1_1_11_small
vendored
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
storage/cache/cache_1_1_12_big
vendored
Normal file
After Width: | Height: | Size: 159 KiB |
BIN
storage/cache/cache_1_1_12_medium
vendored
Normal file
After Width: | Height: | Size: 40 KiB |
BIN
storage/cache/cache_1_1_12_orginal
vendored
Normal file
After Width: | Height: | Size: 237 KiB |
BIN
storage/cache/cache_1_1_12_small
vendored
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
storage/cache/cache_1_1_13_big
vendored
Normal file
After Width: | Height: | Size: 209 KiB |
BIN
storage/cache/cache_1_1_13_medium
vendored
Normal file
After Width: | Height: | Size: 56 KiB |
BIN
storage/cache/cache_1_1_13_orginal
vendored
Normal file
After Width: | Height: | Size: 303 KiB |
BIN
storage/cache/cache_1_1_13_small
vendored
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
storage/cache/cache_1_1_14_big
vendored
Normal file
After Width: | Height: | Size: 214 KiB |
BIN
storage/cache/cache_1_1_14_medium
vendored
Normal file
After Width: | Height: | Size: 64 KiB |
BIN
storage/cache/cache_1_1_14_orginal
vendored
Normal file
After Width: | Height: | Size: 316 KiB |
BIN
storage/cache/cache_1_1_14_small
vendored
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
storage/cache/cache_1_1_15_big
vendored
Normal file
After Width: | Height: | Size: 197 KiB |
BIN
storage/cache/cache_1_1_15_medium
vendored
Normal file
After Width: | Height: | Size: 55 KiB |
BIN
storage/cache/cache_1_1_15_orginal
vendored
Normal file
After Width: | Height: | Size: 283 KiB |
BIN
storage/cache/cache_1_1_15_small
vendored
Normal file
After Width: | Height: | Size: 15 KiB |