update to metronic v8.2.0
@ -25,7 +25,7 @@ class BootstrapDefault
|
|||||||
public function initAssets()
|
public function initAssets()
|
||||||
{
|
{
|
||||||
# Include global vendors
|
# Include global vendors
|
||||||
addVendors(['datatables', 'fullcalendar']);
|
addVendors(['datatables']);
|
||||||
|
|
||||||
# Include global javascript files
|
# Include global javascript files
|
||||||
addJavascriptFile('assets/js/custom/widgets.js');
|
addJavascriptFile('assets/js/custom/widgets.js');
|
||||||
|
@ -231,7 +231,7 @@ class Theme
|
|||||||
function extendCssFilename($path)
|
function extendCssFilename($path)
|
||||||
{
|
{
|
||||||
if ($this->isRtlDirection()) {
|
if ($this->isRtlDirection()) {
|
||||||
$path = str_replace('.css', '.rtl.css');
|
$path = str_replace('.css', '.rtl.css', $path);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $path;
|
return $path;
|
||||||
@ -280,8 +280,9 @@ class Theme
|
|||||||
*/
|
*/
|
||||||
function getGlobalAssets($type = 'js')
|
function getGlobalAssets($type = 'js')
|
||||||
{
|
{
|
||||||
// $this->extendCssFilename()
|
return array_map(function($path) {
|
||||||
return config('settings.KT_THEME_ASSETS.global.'.$type);
|
return $this->extendCssFilename($path);
|
||||||
|
}, config('settings.KT_THEME_ASSETS.global.'.$type));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -391,12 +392,10 @@ class Theme
|
|||||||
return self::$htmlAttributes[$scope][$attribute] ?? [];
|
return self::$htmlAttributes[$scope][$attribute] ?? [];
|
||||||
}
|
}
|
||||||
|
|
||||||
function getIcon($name, $class = '', $type = '')
|
function getIcon($name, $class = '', $type = '', $tag = 'span')
|
||||||
{
|
{
|
||||||
$type = config('settings.KT_THEME_ICONS', 'duotone');
|
$type = config('settings.KT_THEME_ICONS', 'duotone');
|
||||||
|
|
||||||
$tag = 'span';
|
|
||||||
|
|
||||||
if ($type === 'duotone') {
|
if ($type === 'duotone') {
|
||||||
$icons = cache()->remember('duotone-icons', 3600, function () {
|
$icons = cache()->remember('duotone-icons', 3600, function () {
|
||||||
return json_decode(file_get_contents(public_path('icons.json')), true);
|
return json_decode(file_get_contents(public_path('icons.json')), true);
|
||||||
|
@ -131,6 +131,7 @@
|
|||||||
*/
|
*/
|
||||||
function setModeSwitch($flag)
|
function setModeSwitch($flag)
|
||||||
{
|
{
|
||||||
|
theme()->setModeSwitch($flag);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -143,6 +144,7 @@
|
|||||||
*/
|
*/
|
||||||
function isModeSwitchEnabled()
|
function isModeSwitchEnabled()
|
||||||
{
|
{
|
||||||
|
return theme()->isModeSwitchEnabled();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -157,6 +159,7 @@
|
|||||||
*/
|
*/
|
||||||
function setModeDefault($mode)
|
function setModeDefault($mode)
|
||||||
{
|
{
|
||||||
|
theme()->setModeDefault($mode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -169,6 +172,7 @@
|
|||||||
*/
|
*/
|
||||||
function getModeDefault()
|
function getModeDefault()
|
||||||
{
|
{
|
||||||
|
return theme()->getModeDefault();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -183,6 +187,7 @@
|
|||||||
*/
|
*/
|
||||||
function setDirection($direction)
|
function setDirection($direction)
|
||||||
{
|
{
|
||||||
|
theme()->setDirection($direction);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -195,6 +200,7 @@
|
|||||||
*/
|
*/
|
||||||
function getDirection()
|
function getDirection()
|
||||||
{
|
{
|
||||||
|
return theme()->getDirection();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -207,6 +213,7 @@
|
|||||||
*/
|
*/
|
||||||
function isRtlDirection()
|
function isRtlDirection()
|
||||||
{
|
{
|
||||||
|
return theme()->isRtlDirection();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -221,6 +228,7 @@
|
|||||||
*/
|
*/
|
||||||
function extendCssFilename($path)
|
function extendCssFilename($path)
|
||||||
{
|
{
|
||||||
|
return theme()->extendCssFilename($path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -421,12 +429,13 @@
|
|||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function getIcon($name, $class = '', $type = '')
|
function getIcon($name, $class = '', $type = '', $tag = 'span')
|
||||||
{
|
{
|
||||||
return theme()->getIcon($name, $class, $type);
|
return theme()->getIcon($name, $class, $type, $tag);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (!function_exists('get_user')) {
|
if (!function_exists('get_user')) {
|
||||||
/**
|
/**
|
||||||
* Get icon
|
* Get icon
|
||||||
@ -441,6 +450,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (!function_exists('get_status')) {
|
if (!function_exists('get_status')) {
|
||||||
/**
|
/**
|
||||||
* Get icon
|
* Get icon
|
||||||
@ -461,129 +471,131 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!function_exists('verify_user')) {
|
||||||
function verify_user($id, $passwd, $SERVER_ADDR, $IPUserManager, $portUserManager, $appId)
|
function verify_user($id, $passwd, $SERVER_ADDR, $IPUserManager, $portUserManager, $appId)
|
||||||
{
|
{
|
||||||
|
$USERMANPROG = "user_verification.php";
|
||||||
$USERMANPROG = "user_verification.php";
|
$sock = fsockopen("tcp://" . $IPUserManager, $portUserManager, $errno, $errstr, 30);
|
||||||
$sock = fsockopen("tcp://" . $IPUserManager, $portUserManager, $errno, $errstr, 30);
|
if (!$sock)
|
||||||
|
die("$errstr ($errno)\n");
|
||||||
|
$data = "appsid=" . urlencode($appId) . "&loginid=" . urlencode($id) . "&passwd=" . urlencode($passwd) . "&addr=" . $SERVER_ADDR . "&version=2";
|
||||||
if (!$sock) die("$errstr ($errno)\n");
|
//echo "data: $data <BR>";
|
||||||
|
fwrite($sock, "POST /user_verification_dev.php HTTP/1.0\r\n");
|
||||||
$data = "appsid=" . urlencode($appId) . "&loginid=" . urlencode($id) . "&passwd=" . urlencode($passwd) . "&addr=" . $SERVER_ADDR . "&version=2";
|
fwrite($sock, "Host: $IPUserManager\r\n");
|
||||||
|
fwrite($sock, "Content-type: application/x-www-form-urlencoded\r\n");
|
||||||
//echo "data: $data <BR>";
|
fwrite($sock, "Content-length: " . strlen($data) . "\r\n");
|
||||||
|
fwrite($sock, "Accept: */*\r\n");
|
||||||
fwrite($sock, "POST /user_verification_dev.php HTTP/1.0\r\n");
|
fwrite($sock, "\r\n");
|
||||||
fwrite($sock, "Host: $IPUserManager\r\n");
|
fwrite($sock, "$data\r\n");
|
||||||
fwrite($sock, "Content-type: application/x-www-form-urlencoded\r\n");
|
fwrite($sock, "\r\n");
|
||||||
fwrite($sock, "Content-length: " . strlen($data) . "\r\n");
|
$headers = "";
|
||||||
fwrite($sock, "Accept: */*\r\n");
|
while ($str = trim(fgets($sock, 4096)))
|
||||||
fwrite($sock, "\r\n");
|
$headers .= "$str\n";
|
||||||
fwrite($sock, "$data\r\n");
|
$body = "";
|
||||||
fwrite($sock, "\r\n");
|
while (!feof($sock))
|
||||||
|
$body .= fgets($sock, 4096);
|
||||||
$headers = "";
|
fclose($sock);
|
||||||
while ($str = trim(fgets($sock, 4096))) $headers .= "$str\n";
|
return decompress($body);
|
||||||
|
}
|
||||||
$body = "";
|
|
||||||
while (!feof($sock)) $body .= fgets($sock, 4096);
|
|
||||||
|
|
||||||
|
|
||||||
fclose($sock);
|
|
||||||
|
|
||||||
return decompress($body);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!function_exists('getAllowableScript')) {
|
||||||
function getAllowableScript($sessionMenu)
|
function getAllowableScript($sessionMenu)
|
||||||
{
|
{
|
||||||
//$sessionMenu = $_SESSION['MENU'];
|
//$sessionMenu = $_SESSION['MENU'];
|
||||||
|
if (!empty($sessionMenu)) {
|
||||||
if (!empty($sessionMenu)) {
|
$tempMenuArrayLine = explode('-', $sessionMenu);
|
||||||
$tempMenuArrayLine = explode('-', $sessionMenu);
|
//print_r($tempMenuArrayLine);
|
||||||
//print_r($tempMenuArrayLine);
|
if (count($tempMenuArrayLine) > 0) {
|
||||||
if (count($tempMenuArrayLine) > 0) {
|
foreach ($tempMenuArrayLine as $tkey => $tval) {
|
||||||
foreach ($tempMenuArrayLine as $tkey => $tval) {
|
$tempMenuArray = explode('|', $tval);
|
||||||
$tempMenuArray = explode('|', $tval);
|
if (count($tempMenuArray) > 0) {
|
||||||
if (count($tempMenuArray) > 0) {
|
foreach ($tempMenuArray as $mkey => $mval) {
|
||||||
foreach ($tempMenuArray as $mkey => $mval) {
|
[$menukey, $menuval] = explode('>', $mval);
|
||||||
[$menukey, $menuval] = explode('>', $mval);
|
if ($menukey === 'LINK') {
|
||||||
if ($menukey === 'LINK') {
|
$SCRIPT_ALLOW[$menuval] = 1;
|
||||||
$SCRIPT_ALLOW[$menuval] = 1;
|
}
|
||||||
|
//$menu[$menuCounter][$menukey] = $menuval;
|
||||||
}
|
}
|
||||||
//$menu[$menuCounter][$menukey] = $menuval;
|
//$menuCounter++;
|
||||||
}
|
}
|
||||||
//$menuCounter++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return $SCRIPT_ALLOW;
|
||||||
}
|
}
|
||||||
return $SCRIPT_ALLOW;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function decompress($data)
|
if(!function_exists('decompress')) {
|
||||||
{
|
function decompress($data)
|
||||||
$text = '';
|
{
|
||||||
$total = strlen($data);
|
$text = '';
|
||||||
for ($j = 0; $j < $total; $j = $j + 2) {
|
$total = strlen($data);
|
||||||
$text .= chr(hexdec(substr($data, $j, 2)));
|
for ($j = 0; $j < $total; $j = $j + 2) {
|
||||||
}
|
$text .= chr(hexdec(substr($data, $j, 2)));
|
||||||
|
|
||||||
return $text;
|
|
||||||
}
|
|
||||||
|
|
||||||
function compress($data)
|
|
||||||
{
|
|
||||||
$text = '';
|
|
||||||
$total = strlen($data);
|
|
||||||
for ($i = 0; $i < $total; $i++) {
|
|
||||||
$temp = dechex(ord(substr($data, $i, 1)));
|
|
||||||
if (strlen($temp) < 2) {
|
|
||||||
$temp = '0' . $temp;
|
|
||||||
}
|
}
|
||||||
$text .= $temp;
|
return $text;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return $text;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function jsonToView($jsonText = '')
|
|
||||||
{
|
|
||||||
$arr = json_decode($jsonText, true);
|
|
||||||
$html = "";
|
|
||||||
if ($arr && is_array($arr)) {
|
|
||||||
$html .= _arrayToHtmlTableRecursive($arr);
|
|
||||||
}
|
|
||||||
return $html;
|
|
||||||
}
|
|
||||||
|
|
||||||
function _arrayToHtmlTableRecursive($arr)
|
if(!function_exists('compress')) {
|
||||||
{
|
function compress($data)
|
||||||
$str = "<table><tbody>";
|
{
|
||||||
foreach ($arr as $key => $val) {
|
$text = '';
|
||||||
$str .= "<tr>";
|
$total = strlen($data);
|
||||||
$str .= "<td>$key</td>";
|
for ($i = 0; $i < $total; $i++) {
|
||||||
$str .= "<td>";
|
$temp = dechex(ord(substr($data, $i, 1)));
|
||||||
if (is_array($val)) {
|
if (strlen($temp) < 2) {
|
||||||
if (!empty($val)) {
|
$temp = '0' . $temp;
|
||||||
$str .= _arrayToHtmlTableRecursive($val);
|
|
||||||
}
|
}
|
||||||
} else {
|
$text .= $temp;
|
||||||
$str .= "<strong>$val</strong>";
|
|
||||||
}
|
}
|
||||||
$str .= "</td></tr>";
|
return $text;
|
||||||
}
|
}
|
||||||
$str .= "</tbody></table>";
|
|
||||||
|
|
||||||
return $str;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function _countDocumentOnCardboard($cardboard_id){
|
if(!function_exists('jsonToView')) {
|
||||||
$cardboard = Cardboard::with(['cardboard_detail'])->find($cardboard_id);
|
function jsonToView($jsonText = '')
|
||||||
$document_id = $cardboard->cardboard_detail->pluck('document_id')->toArray();
|
{
|
||||||
|
$arr = json_decode($jsonText, true);
|
||||||
return count($document_id);
|
$html = "";
|
||||||
|
if ($arr && is_array($arr)) {
|
||||||
|
$html .= _arrayToHtmlTableRecursive($arr);
|
||||||
|
}
|
||||||
|
return $html;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!function_exists('_arrayToHtmlTableRecursive')) {
|
||||||
|
function _arrayToHtmlTableRecursive($arr)
|
||||||
|
{
|
||||||
|
$str = "<table><tbody>";
|
||||||
|
foreach ($arr as $key => $val) {
|
||||||
|
$str .= "<tr>";
|
||||||
|
$str .= "<td>$key</td>";
|
||||||
|
$str .= "<td>";
|
||||||
|
if (is_array($val)) {
|
||||||
|
if (!empty($val)) {
|
||||||
|
$str .= _arrayToHtmlTableRecursive($val);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$str .= "<strong>$val</strong>";
|
||||||
|
}
|
||||||
|
$str .= "</td></tr>";
|
||||||
|
}
|
||||||
|
$str .= "</tbody></table>";
|
||||||
|
return $str;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if(!function_exists('_countDocumentOnCardboard')) {
|
||||||
|
function _countDocumentOnCardboard($cardboard_id)
|
||||||
|
{
|
||||||
|
$cardboard = Cardboard::with(['cardboard_detail'])->find($cardboard_id);
|
||||||
|
$document_id = $cardboard->cardboard_detail->pluck('document_id')->toArray();
|
||||||
|
return count($document_id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ class Kernel extends HttpKernel
|
|||||||
],
|
],
|
||||||
|
|
||||||
'api' => [
|
'api' => [
|
||||||
\Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
|
// \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
|
||||||
'throttle:api',
|
'throttle:api',
|
||||||
\Illuminate\Routing\Middleware\SubstituteBindings::class,
|
\Illuminate\Routing\Middleware\SubstituteBindings::class,
|
||||||
],
|
],
|
||||||
|
@ -13,5 +13,6 @@ class VerifyCsrfToken extends Middleware
|
|||||||
*/
|
*/
|
||||||
protected $except = [
|
protected $except = [
|
||||||
//
|
//
|
||||||
|
'login'
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Providers;
|
namespace App\Providers;
|
||||||
|
|
||||||
|
use App\Core\KTBootstrap;
|
||||||
use Illuminate\Database\Schema\Builder;
|
use Illuminate\Database\Schema\Builder;
|
||||||
use Illuminate\Support\ServiceProvider;
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
|
||||||
@ -26,5 +27,7 @@ class AppServiceProvider extends ServiceProvider
|
|||||||
{
|
{
|
||||||
// Update defaultStringLength
|
// Update defaultStringLength
|
||||||
Builder::defaultStringLength(191);
|
Builder::defaultStringLength(191);
|
||||||
|
|
||||||
|
KTBootstrap::init();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,27 +1,28 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Providers;
|
namespace App\Providers;
|
||||||
|
|
||||||
// use Illuminate\Support\Facades\Gate;
|
// use Illuminate\Support\Facades\Gate;
|
||||||
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
|
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
|
||||||
|
|
||||||
class AuthServiceProvider extends ServiceProvider
|
class AuthServiceProvider extends ServiceProvider
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The model to policy mappings for the application.
|
||||||
|
*
|
||||||
|
* @var array<class-string, class-string>
|
||||||
|
*/
|
||||||
|
protected $policies = [
|
||||||
|
// 'App\Models\Model' => 'App\Policies\ModelPolicy',
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register any authentication / authorization services.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function boot()
|
||||||
{
|
{
|
||||||
/**
|
//
|
||||||
* The model to policy mappings for the application.
|
|
||||||
*
|
|
||||||
* @var array<class-string, class-string>
|
|
||||||
*/
|
|
||||||
protected $policies = [// 'App\Models\Model' => 'App\Policies\ModelPolicy',
|
|
||||||
];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Register any authentication / authorization services.
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function boot()
|
|
||||||
{
|
|
||||||
//
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
@ -24,7 +24,6 @@
|
|||||||
"laravelcollective/html": "^6.4",
|
"laravelcollective/html": "^6.4",
|
||||||
"laravolt/avatar": "^5.0",
|
"laravolt/avatar": "^5.0",
|
||||||
"nwidart/laravel-modules": "^10.0",
|
"nwidart/laravel-modules": "^10.0",
|
||||||
"putrakuningan/cetaklabel-module": "dev-sit",
|
|
||||||
"putrakuningan/logs-module": "dev-master",
|
"putrakuningan/logs-module": "dev-master",
|
||||||
"putrakuningan/usermanager-module": "dev-sit",
|
"putrakuningan/usermanager-module": "dev-sit",
|
||||||
"simplesoftwareio/simple-qrcode": "^4.2",
|
"simplesoftwareio/simple-qrcode": "^4.2",
|
||||||
@ -32,7 +31,11 @@
|
|||||||
"spatie/laravel-permission": "^5.10",
|
"spatie/laravel-permission": "^5.10",
|
||||||
"wildside/userstamps": "^2.3",
|
"wildside/userstamps": "^2.3",
|
||||||
"yajra/laravel-datatables": "^10.0",
|
"yajra/laravel-datatables": "^10.0",
|
||||||
"yajra/laravel-datatables-oracle": "^10.3.1"
|
"yajra/laravel-datatables-oracle": "^10.3.1",
|
||||||
|
|
||||||
|
"diglactic/laravel-breadcrumbs": "^8.1",
|
||||||
|
"laravel/socialite": "^5.6",
|
||||||
|
"livewire/livewire": "^2.12"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"fakerphp/faker": "^1.9.1",
|
"fakerphp/faker": "^1.9.1",
|
||||||
@ -43,6 +46,7 @@
|
|||||||
"nunomaduro/collision": "^7.0",
|
"nunomaduro/collision": "^7.0",
|
||||||
"phpunit/phpunit": "^10.0",
|
"phpunit/phpunit": "^10.0",
|
||||||
"spatie/laravel-ignition": "^2.0"
|
"spatie/laravel-ignition": "^2.0"
|
||||||
|
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
@ -60,7 +64,8 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"post-autoload-dump": [
|
"post-autoload-dump": [
|
||||||
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
|
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
|
||||||
"@php artisan package:discover --ansi"
|
"@php artisan package:discover --ansi",
|
||||||
|
"@php artisan vendor:publish --force --tag=livewire:assets --ansi"
|
||||||
],
|
],
|
||||||
"post-update-cmd": [
|
"post-update-cmd": [
|
||||||
"@php artisan vendor:publish --tag=laravel-assets --ansi --force"
|
"@php artisan vendor:publish --tag=laravel-assets --ansi --force"
|
||||||
@ -98,11 +103,6 @@
|
|||||||
"name": "putrakuningan/usermanager-module",
|
"name": "putrakuningan/usermanager-module",
|
||||||
"type": "vcs",
|
"type": "vcs",
|
||||||
"url": "https://git.putrakuningan.com/putrakuningan/Usermanager"
|
"url": "https://git.putrakuningan.com/putrakuningan/Usermanager"
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "putrakuningan/cetaklabel-module",
|
|
||||||
"type": "vcs",
|
|
||||||
"url": "https://git.putrakuningan.com/putrakuningan/Cetaklabel"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Illuminate\Support\Facades\Facade;
|
use Illuminate\Support\Facades\Facade;
|
||||||
|
|
||||||
return [
|
return [
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
@ -156,49 +156,49 @@
|
|||||||
|
|
||||||
'providers' => [
|
'providers' => [
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Laravel Framework Service Providers...
|
* Laravel Framework Service Providers...
|
||||||
*/
|
*/
|
||||||
Illuminate\Auth\AuthServiceProvider::class,
|
Illuminate\Auth\AuthServiceProvider::class,
|
||||||
Illuminate\Broadcasting\BroadcastServiceProvider::class,
|
Illuminate\Broadcasting\BroadcastServiceProvider::class,
|
||||||
Illuminate\Bus\BusServiceProvider::class,
|
Illuminate\Bus\BusServiceProvider::class,
|
||||||
Illuminate\Cache\CacheServiceProvider::class,
|
Illuminate\Cache\CacheServiceProvider::class,
|
||||||
Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class,
|
Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class,
|
||||||
Illuminate\Cookie\CookieServiceProvider::class,
|
Illuminate\Cookie\CookieServiceProvider::class,
|
||||||
Illuminate\Database\DatabaseServiceProvider::class,
|
Illuminate\Database\DatabaseServiceProvider::class,
|
||||||
Illuminate\Encryption\EncryptionServiceProvider::class,
|
Illuminate\Encryption\EncryptionServiceProvider::class,
|
||||||
Illuminate\Filesystem\FilesystemServiceProvider::class,
|
Illuminate\Filesystem\FilesystemServiceProvider::class,
|
||||||
Illuminate\Foundation\Providers\FoundationServiceProvider::class,
|
Illuminate\Foundation\Providers\FoundationServiceProvider::class,
|
||||||
Illuminate\Hashing\HashServiceProvider::class,
|
Illuminate\Hashing\HashServiceProvider::class,
|
||||||
Illuminate\Mail\MailServiceProvider::class,
|
Illuminate\Mail\MailServiceProvider::class,
|
||||||
Illuminate\Notifications\NotificationServiceProvider::class,
|
Illuminate\Notifications\NotificationServiceProvider::class,
|
||||||
Illuminate\Pagination\PaginationServiceProvider::class,
|
Illuminate\Pagination\PaginationServiceProvider::class,
|
||||||
Illuminate\Pipeline\PipelineServiceProvider::class,
|
Illuminate\Pipeline\PipelineServiceProvider::class,
|
||||||
Illuminate\Queue\QueueServiceProvider::class,
|
Illuminate\Queue\QueueServiceProvider::class,
|
||||||
Illuminate\Redis\RedisServiceProvider::class,
|
Illuminate\Redis\RedisServiceProvider::class,
|
||||||
Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
|
Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
|
||||||
Illuminate\Session\SessionServiceProvider::class,
|
Illuminate\Session\SessionServiceProvider::class,
|
||||||
Illuminate\Translation\TranslationServiceProvider::class,
|
Illuminate\Translation\TranslationServiceProvider::class,
|
||||||
Illuminate\Validation\ValidationServiceProvider::class,
|
Illuminate\Validation\ValidationServiceProvider::class,
|
||||||
Illuminate\View\ViewServiceProvider::class,
|
Illuminate\View\ViewServiceProvider::class,
|
||||||
/*
|
|
||||||
* Package Service Providers...
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Application Service Providers...
|
* Package Service Providers...
|
||||||
*/
|
*/
|
||||||
App\Providers\HelperServiceProvider::class,
|
|
||||||
App\Providers\AppServiceProvider::class,
|
|
||||||
\App\Providers\AuthServiceProvider::class,
|
|
||||||
// App\Providers\BroadcastServiceProvider::class,
|
|
||||||
App\Providers\EventServiceProvider::class,
|
|
||||||
App\Providers\RouteServiceProvider::class,
|
|
||||||
|
|
||||||
Yajra\DataTables\DataTablesServiceProvider::class,
|
/*
|
||||||
Jackiedo\LogReader\LogReaderServiceProvider::class,
|
* Application Service Providers...
|
||||||
|
*/
|
||||||
|
App\Providers\HelperServiceProvider::class,
|
||||||
|
App\Providers\AppServiceProvider::class,
|
||||||
|
App\Providers\AuthServiceProvider::class,
|
||||||
|
// App\Providers\BroadcastServiceProvider::class,
|
||||||
|
App\Providers\EventServiceProvider::class,
|
||||||
|
App\Providers\RouteServiceProvider::class,
|
||||||
|
|
||||||
Spatie\Permission\PermissionServiceProvider::class,
|
Yajra\DataTables\DataTablesServiceProvider::class,
|
||||||
|
Jackiedo\LogReader\LogReaderServiceProvider::class,
|
||||||
|
Spatie\Permission\PermissionServiceProvider::class,
|
||||||
|
|
||||||
],
|
],
|
||||||
|
|
||||||
|
@ -61,8 +61,8 @@ return [
|
|||||||
|
|
||||||
'providers' => [
|
'providers' => [
|
||||||
'users' => [
|
'users' => [
|
||||||
'driver' => 'eloquent',
|
'driver' => 'eloquent',
|
||||||
'model' => \Modules\Usermanager\Entities\User::class,
|
'model' => \Modules\Usermanager\Entities\User::class,
|
||||||
],
|
],
|
||||||
|
|
||||||
// 'users' => [
|
// 'users' => [
|
||||||
|
@ -31,4 +31,15 @@ return [
|
|||||||
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
|
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
|
||||||
],
|
],
|
||||||
|
|
||||||
|
'google' => [
|
||||||
|
'client_id' => env('GOOGLE_CLIENT_ID'),
|
||||||
|
'client_secret' => env('GOOGLE_CLIENT_SECRET'),
|
||||||
|
'redirect' => env('GOOGLE_CALLBACK_URL'),
|
||||||
|
],
|
||||||
|
|
||||||
|
'facebook' => [
|
||||||
|
'client_id' => env('FACEBOOK_CLIENT_ID'),
|
||||||
|
'client_secret' => env('FACEBOOK_CLIENT_SECRET'),
|
||||||
|
'redirect' => '/auth/redirect/facebook',
|
||||||
|
],
|
||||||
];
|
];
|
||||||
|
@ -1,310 +1,237 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use App\Core\Bootstrap\BootstrapAuth;
|
return [
|
||||||
use App\Core\Bootstrap\BootstrapDefault;
|
|
||||||
use App\Core\Bootstrap\BootstrapSystem;
|
|
||||||
|
|
||||||
return [
|
'KT_THEME_BOOTSTRAP' => [
|
||||||
|
'default' => \App\Core\Bootstrap\BootstrapDefault::class,
|
||||||
|
'auth' => \App\Core\Bootstrap\BootstrapAuth::class,
|
||||||
|
'system' => \App\Core\Bootstrap\BootstrapSystem::class,
|
||||||
|
],
|
||||||
|
|
||||||
'KT_THEME_BOOTSTRAP' => [
|
'KT_THEME' => 'metronic',
|
||||||
'default' => BootstrapDefault::class,
|
|
||||||
'auth' => BootstrapAuth::class,
|
# Theme layout templates directory
|
||||||
'system' => BootstrapSystem::class,
|
|
||||||
|
'KT_THEME_LAYOUT_DIR' => 'layout',
|
||||||
|
|
||||||
|
|
||||||
|
# Theme Mode
|
||||||
|
# Value: light | dark | system
|
||||||
|
|
||||||
|
'KT_THEME_MODE_DEFAULT' => 'light',
|
||||||
|
'KT_THEME_MODE_SWITCH_ENABLED' => true,
|
||||||
|
|
||||||
|
|
||||||
|
# Theme Direction
|
||||||
|
# Value: ltr | rtl
|
||||||
|
|
||||||
|
'KT_THEME_DIRECTION' => 'ltr',
|
||||||
|
|
||||||
|
|
||||||
|
# Keenicons
|
||||||
|
# Value: duotone | outline | bold
|
||||||
|
|
||||||
|
'KT_THEME_ICONS' => 'duotone',
|
||||||
|
|
||||||
|
|
||||||
|
# Theme Assets
|
||||||
|
|
||||||
|
'KT_THEME_ASSETS' => [
|
||||||
|
'favicon' => 'assets/media/logos/favicon.ico',
|
||||||
|
'fonts' => [
|
||||||
|
'https://fonts.googleapis.com/css?family=Inter:300,400,500,600,700',
|
||||||
],
|
],
|
||||||
|
'global' => [
|
||||||
'KT_THEME' => 'metronic',
|
'css' => [
|
||||||
|
'assets/plugins/global/plugins.bundle.css',
|
||||||
# Theme layout templates directory
|
'assets/css/style.bundle.css',
|
||||||
|
|
||||||
'KT_THEME_LAYOUT_DIR' => 'layout',
|
|
||||||
|
|
||||||
|
|
||||||
# Theme Mode
|
|
||||||
# Value: light | dark | system
|
|
||||||
|
|
||||||
'KT_THEME_MODE_DEFAULT' => 'light',
|
|
||||||
'KT_THEME_MODE_SWITCH_ENABLED' => true,
|
|
||||||
|
|
||||||
|
|
||||||
# Theme Direction
|
|
||||||
# Value: ltr | rtl
|
|
||||||
|
|
||||||
'KT_THEME_DIRECTION' => 'ltr',
|
|
||||||
|
|
||||||
|
|
||||||
# Keenicons
|
|
||||||
# Value: duotone | outline | bold
|
|
||||||
|
|
||||||
'KT_THEME_ICONS' => 'duotone',
|
|
||||||
|
|
||||||
|
|
||||||
# Theme Assets
|
|
||||||
|
|
||||||
'KT_THEME_ASSETS' => [
|
|
||||||
'favicon' => 'assets/media/logos/favicon.ico',
|
|
||||||
'fonts' => [
|
|
||||||
'https://fonts.googleapis.com/css?family=Inter:300,400,500,600,700',
|
|
||||||
],
|
],
|
||||||
'global' => [
|
'js' => [
|
||||||
'css' => [
|
'assets/plugins/global/plugins.bundle.js',
|
||||||
'assets/plugins/global/plugins.bundle.css',
|
'assets/js/scripts.bundle.js',
|
||||||
'assets/css/style.bundle.css',
|
'assets/js/widgets.bundle.js',
|
||||||
],
|
|
||||||
'js' => [
|
|
||||||
'assets/plugins/global/plugins.bundle.js',
|
|
||||||
'assets/js/scripts.bundle.js',
|
|
||||||
'assets/js/widgets.bundle.js',
|
|
||||||
],
|
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
],
|
||||||
|
|
||||||
|
|
||||||
# Theme Vendors
|
# Theme Vendors
|
||||||
|
|
||||||
'KT_THEME_VENDORS' => [
|
'KT_THEME_VENDORS' => [
|
||||||
'datatables' => [
|
'datatables' => [
|
||||||
'css' => [
|
'css' => [
|
||||||
'assets/plugins/custom/datatables/datatables.bundle.css',
|
'assets/plugins/custom/datatables/datatables.bundle.css',
|
||||||
],
|
|
||||||
'js' => [
|
|
||||||
'assets/plugins/custom/datatables/datatables.bundle.js',
|
|
||||||
],
|
|
||||||
],
|
],
|
||||||
'formrepeater' => [
|
'js' => [
|
||||||
'js' => [
|
'assets/plugins/custom/datatables/datatables.bundle.js',
|
||||||
'assets/plugins/custom/formrepeater/formrepeater.bundle.js',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'fullcalendar' => [
|
|
||||||
'css' => [
|
|
||||||
'assets/plugins/custom/fullcalendar/fullcalendar.bundle.css',
|
|
||||||
],
|
|
||||||
'js' => [
|
|
||||||
'assets/plugins/custom/fullcalendar/fullcalendar.bundle.js',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'flotcharts' => [
|
|
||||||
'js' => [
|
|
||||||
'assets/plugins/custom/flotcharts/flotcharts.bundle.js',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'google-jsapi' => [
|
|
||||||
'js' => [
|
|
||||||
'//www.google.com/jsapi',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'tinymce' => [
|
|
||||||
'js' => [
|
|
||||||
'assets/plugins/custom/tinymce/tinymce.bundle.js',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'ckeditor-classic' => [
|
|
||||||
'js' => [
|
|
||||||
'assets/plugins/custom/ckeditor/ckeditor-classic.bundle.js',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'ckeditor-inline' => [
|
|
||||||
'js' => [
|
|
||||||
'assets/plugins/custom/ckeditor/ckeditor-inline.bundle.js',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'ckeditor-balloon' => [
|
|
||||||
'js' => [
|
|
||||||
'assets/plugins/custom/ckeditor/ckeditor-balloon.bundle.js',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'ckeditor-balloon-block' => [
|
|
||||||
'js' => [
|
|
||||||
'assets/plugins/custom/ckeditor/ckeditor-balloon-block.bundle.js',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'ckeditor-document' => [
|
|
||||||
'js' => [
|
|
||||||
'assets/plugins/custom/ckeditor/ckeditor-document.bundle.js',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'draggable' => [
|
|
||||||
'js' => [
|
|
||||||
'assets/plugins/custom/draggable/draggable.bundle.js',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'fslightbox' => [
|
|
||||||
'js' => [
|
|
||||||
'assets/plugins/custom/fslightbox/fslightbox.bundle.js',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'jkanban' => [
|
|
||||||
'css' => [
|
|
||||||
'assets/plugins/custom/jkanban/jkanban.bundle.css',
|
|
||||||
],
|
|
||||||
'js' => [
|
|
||||||
'assets/plugins/custom/jkanban/jkanban.bundle.js',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'typedjs' => [
|
|
||||||
'js' => [
|
|
||||||
'assets/plugins/custom/typedjs/typedjs.bundle.js',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'cookiealert' => [
|
|
||||||
'css' => [
|
|
||||||
'assets/plugins/custom/cookiealert/cookiealert.bundle.css',
|
|
||||||
],
|
|
||||||
'js' => [
|
|
||||||
'assets/plugins/custom/cookiealert/cookiealert.bundle.js',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'cropper' => [
|
|
||||||
'css' => [
|
|
||||||
'assets/plugins/custom/cropper/cropper.bundle.css',
|
|
||||||
],
|
|
||||||
'js' => [
|
|
||||||
'assets/plugins/custom/cropper/cropper.bundle.js',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'vis-timeline' => [
|
|
||||||
'css' => [
|
|
||||||
'assets/plugins/custom/vis-timeline/vis-timeline.bundle.css',
|
|
||||||
],
|
|
||||||
'js' => [
|
|
||||||
'assets/plugins/custom/vis-timeline/vis-timeline.bundle.js',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'jstree' => [
|
|
||||||
'css' => [
|
|
||||||
'assets/plugins/custom/jstree/jstree.bundle.css',
|
|
||||||
],
|
|
||||||
'js' => [
|
|
||||||
'assets/plugins/custom/jstree/jstree.bundle.js',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'prismjs' => [
|
|
||||||
'css' => [
|
|
||||||
'assets/plugins/custom/prismjs/prismjs.bundle.css',
|
|
||||||
],
|
|
||||||
'js' => [
|
|
||||||
'assets/plugins/custom/prismjs/prismjs.bundle.js',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'leaflet' => [
|
|
||||||
'css' => [
|
|
||||||
'assets/plugins/custom/leaflet/leaflet.bundle.css',
|
|
||||||
],
|
|
||||||
'js' => [
|
|
||||||
'assets/plugins/custom/leaflet/leaflet.bundle.js',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'amcharts' => [
|
|
||||||
'js' => [
|
|
||||||
'https://cdn.amcharts.com/lib/5/index.js',
|
|
||||||
'https://cdn.amcharts.com/lib/5/xy.js',
|
|
||||||
'https://cdn.amcharts.com/lib/5/percent.js',
|
|
||||||
'https://cdn.amcharts.com/lib/5/radar.js',
|
|
||||||
'https://cdn.amcharts.com/lib/5/themes/Animated.js',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'amcharts-maps' => [
|
|
||||||
'js' => [
|
|
||||||
'https://cdn.amcharts.com/lib/5/index.js',
|
|
||||||
'https://cdn.amcharts.com/lib/5/map.js',
|
|
||||||
'https://cdn.amcharts.com/lib/5/geodata/worldLow.js',
|
|
||||||
'https://cdn.amcharts.com/lib/5/geodata/continentsLow.js',
|
|
||||||
'https://cdn.amcharts.com/lib/5/geodata/usaLow.js',
|
|
||||||
'https://cdn.amcharts.com/lib/5/geodata/worldTimeZonesLow.js',
|
|
||||||
'https://cdn.amcharts.com/lib/5/geodata/worldTimeZoneAreasLow.js',
|
|
||||||
'https://cdn.amcharts.com/lib/5/themes/Animated.js',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'amcharts-stock' => [
|
|
||||||
'js' => [
|
|
||||||
'https://cdn.amcharts.com/lib/5/index.js',
|
|
||||||
'https://cdn.amcharts.com/lib/5/xy.js',
|
|
||||||
'https://cdn.amcharts.com/lib/5/themes/Animated.js',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'bootstrap-select' => [
|
|
||||||
'css' => [
|
|
||||||
'assets/plugins/custom/bootstrap-select/bootstrap-select.bundle.css',
|
|
||||||
],
|
|
||||||
'js' => [
|
|
||||||
'assets/plugins/custom/bootstrap-select/bootstrap-select.bundle.js',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'chained-select' => [
|
|
||||||
'js' => [
|
|
||||||
'assets/plugins/custom/jquery-chained/jquery.chained.js',
|
|
||||||
'assets/plugins/custom/jquery-chained/jquery.chained.remote.js',
|
|
||||||
],
|
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
/*
|
'formrepeater' => [
|
||||||
|--------------------------------------------------------------------------
|
'js' => [
|
||||||
| Default Settings Store
|
'assets/plugins/custom/formrepeater/formrepeater.bundle.js',
|
||||||
|--------------------------------------------------------------------------
|
],
|
||||||
|
|
],
|
||||||
| This option controls the default settings store that gets used while
|
'fullcalendar' => [
|
||||||
| using this settings library.
|
'css' => [
|
||||||
|
|
'assets/plugins/custom/fullcalendar/fullcalendar.bundle.css',
|
||||||
| Supported: "json", "database"
|
],
|
||||||
|
|
'js' => [
|
||||||
*/
|
'assets/plugins/custom/fullcalendar/fullcalendar.bundle.js',
|
||||||
'store' => 'database',
|
],
|
||||||
|
],
|
||||||
|
'flotcharts' => [
|
||||||
|
'js' => [
|
||||||
|
'assets/plugins/custom/flotcharts/flotcharts.bundle.js',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'google-jsapi' => [
|
||||||
|
'js' => [
|
||||||
|
'//www.google.com/jsapi',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'tinymce' => [
|
||||||
|
'js' => [
|
||||||
|
'assets/plugins/custom/tinymce/tinymce.bundle.js',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'ckeditor-classic' => [
|
||||||
|
'js' => [
|
||||||
|
'assets/plugins/custom/ckeditor/ckeditor-classic.bundle.js',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'ckeditor-inline' => [
|
||||||
|
'js' => [
|
||||||
|
'assets/plugins/custom/ckeditor/ckeditor-inline.bundle.js',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'ckeditor-balloon' => [
|
||||||
|
'js' => [
|
||||||
|
'assets/plugins/custom/ckeditor/ckeditor-balloon.bundle.js',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'ckeditor-balloon-block' => [
|
||||||
|
'js' => [
|
||||||
|
'assets/plugins/custom/ckeditor/ckeditor-balloon-block.bundle.js',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'ckeditor-document' => [
|
||||||
|
'js' => [
|
||||||
|
'assets/plugins/custom/ckeditor/ckeditor-document.bundle.js',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'draggable' => [
|
||||||
|
'js' => [
|
||||||
|
'assets/plugins/custom/draggable/draggable.bundle.js',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'fslightbox' => [
|
||||||
|
'js' => [
|
||||||
|
'assets/plugins/custom/fslightbox/fslightbox.bundle.js',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'jkanban' => [
|
||||||
|
'css' => [
|
||||||
|
'assets/plugins/custom/jkanban/jkanban.bundle.css',
|
||||||
|
],
|
||||||
|
'js' => [
|
||||||
|
'assets/plugins/custom/jkanban/jkanban.bundle.js',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'typedjs' => [
|
||||||
|
'js' => [
|
||||||
|
'assets/plugins/custom/typedjs/typedjs.bundle.js',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'cookiealert' => [
|
||||||
|
'css' => [
|
||||||
|
'assets/plugins/custom/cookiealert/cookiealert.bundle.css',
|
||||||
|
],
|
||||||
|
'js' => [
|
||||||
|
'assets/plugins/custom/cookiealert/cookiealert.bundle.js',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'cropper' => [
|
||||||
|
'css' => [
|
||||||
|
'assets/plugins/custom/cropper/cropper.bundle.css',
|
||||||
|
],
|
||||||
|
'js' => [
|
||||||
|
'assets/plugins/custom/cropper/cropper.bundle.js',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'vis-timeline' => [
|
||||||
|
'css' => [
|
||||||
|
'assets/plugins/custom/vis-timeline/vis-timeline.bundle.css',
|
||||||
|
],
|
||||||
|
'js' => [
|
||||||
|
'assets/plugins/custom/vis-timeline/vis-timeline.bundle.js',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'jstree' => [
|
||||||
|
'css' => [
|
||||||
|
'assets/plugins/custom/jstree/jstree.bundle.css',
|
||||||
|
],
|
||||||
|
'js' => [
|
||||||
|
'assets/plugins/custom/jstree/jstree.bundle.js',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'prismjs' => [
|
||||||
|
'css' => [
|
||||||
|
'assets/plugins/custom/prismjs/prismjs.bundle.css',
|
||||||
|
],
|
||||||
|
'js' => [
|
||||||
|
'assets/plugins/custom/prismjs/prismjs.bundle.js',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'leaflet' => [
|
||||||
|
'css' => [
|
||||||
|
'assets/plugins/custom/leaflet/leaflet.bundle.css',
|
||||||
|
],
|
||||||
|
'js' => [
|
||||||
|
'assets/plugins/custom/leaflet/leaflet.bundle.js',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'amcharts' => [
|
||||||
|
'js' => [
|
||||||
|
'https://cdn.amcharts.com/lib/5/index.js',
|
||||||
|
'https://cdn.amcharts.com/lib/5/xy.js',
|
||||||
|
'https://cdn.amcharts.com/lib/5/percent.js',
|
||||||
|
'https://cdn.amcharts.com/lib/5/radar.js',
|
||||||
|
'https://cdn.amcharts.com/lib/5/themes/Animated.js',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'amcharts-maps' => [
|
||||||
|
'js' => [
|
||||||
|
'https://cdn.amcharts.com/lib/5/index.js',
|
||||||
|
'https://cdn.amcharts.com/lib/5/map.js',
|
||||||
|
'https://cdn.amcharts.com/lib/5/geodata/worldLow.js',
|
||||||
|
'https://cdn.amcharts.com/lib/5/geodata/continentsLow.js',
|
||||||
|
'https://cdn.amcharts.com/lib/5/geodata/usaLow.js',
|
||||||
|
'https://cdn.amcharts.com/lib/5/geodata/worldTimeZonesLow.js',
|
||||||
|
'https://cdn.amcharts.com/lib/5/geodata/worldTimeZoneAreasLow.js',
|
||||||
|
'https://cdn.amcharts.com/lib/5/themes/Animated.js',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'amcharts-stock' => [
|
||||||
|
'js' => [
|
||||||
|
'https://cdn.amcharts.com/lib/5/index.js',
|
||||||
|
'https://cdn.amcharts.com/lib/5/xy.js',
|
||||||
|
'https://cdn.amcharts.com/lib/5/themes/Animated.js',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'bootstrap-select' => [
|
||||||
|
'css' => [
|
||||||
|
'assets/plugins/custom/bootstrap-select/bootstrap-select.bundle.css',
|
||||||
|
],
|
||||||
|
'js' => [
|
||||||
|
'assets/plugins/custom/bootstrap-select/bootstrap-select.bundle.js',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'chained-select' => [
|
||||||
|
'js' => [
|
||||||
|
'assets/plugins/custom/jquery-chained/jquery.chained.js',
|
||||||
|
'assets/plugins/custom/jquery-chained/jquery.chained.remote.js',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
|
||||||
/*
|
];
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
| JSON Store
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| If the store is set to "json", settings are stored in the defined
|
|
||||||
| file path in JSON format. Use full path to file.
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
'path' => storage_path() . '/settings.json',
|
|
||||||
|
|
||||||
/*
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
| Database Store
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| The settings are stored in the defined file path in JSON format.
|
|
||||||
| Use full path to JSON file.
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
// If set to null, the default connection will be used.
|
|
||||||
'connection' => null,
|
|
||||||
// Name of the table used.
|
|
||||||
'table' => 'settings',
|
|
||||||
// If you want to use custom column names in database store you could
|
|
||||||
// set them in this configuration
|
|
||||||
'keyColumn' => 'key',
|
|
||||||
'valueColumn' => 'value',
|
|
||||||
|
|
||||||
/*
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
| Cache settings
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| If you want all setting calls to go through Laravel's cache system.
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
'enableCache' => false,
|
|
||||||
// Whether to reset the cache when changing a setting.
|
|
||||||
'forgetCacheByWrite' => true,
|
|
||||||
// TTL in seconds.
|
|
||||||
'cacheTtl' => 15,
|
|
||||||
|
|
||||||
/*
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
| Default Settings
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| Define all default settings that will be used before any settings are set,
|
|
||||||
| this avoids all settings being set to false to begin with and avoids
|
|
||||||
| hardcoding the same defaults in all 'Settings::get()' calls
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
'defaults' => [
|
|
||||||
'foo' => 'bar',
|
|
||||||
]
|
|
||||||
|
|
||||||
];
|
|
||||||
|
@ -1,20 +1,29 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Database\Seeders;
|
namespace Database\Seeders;
|
||||||
|
|
||||||
// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||||
use Illuminate\Database\Seeder;
|
use Illuminate\Database\Seeder;
|
||||||
use Modules\Usermanager\Database\Seeders\UsersSeeder;
|
|
||||||
|
|
||||||
class DatabaseSeeder extends Seeder
|
class DatabaseSeeder extends Seeder
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Seed the application's database.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function run()
|
||||||
{
|
{
|
||||||
/**
|
$this->call([
|
||||||
* Seed the application's database.
|
UsersSeeder::class,
|
||||||
*
|
RolesPermissionsSeeder::class,
|
||||||
* @return void
|
]);
|
||||||
*/
|
|
||||||
public function run()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
\App\Models\User::factory(10)->create();
|
||||||
|
|
||||||
|
// \App\Models\User::factory()->create([
|
||||||
|
// 'name' => 'Test User',
|
||||||
|
// 'email' => 'test@example.com',
|
||||||
|
// ]);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
78
package.json
@ -10,22 +10,22 @@
|
|||||||
"production": "mix --production"
|
"production": "mix --production"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@ckeditor/ckeditor5-alignment": "^35.2.1",
|
"@ckeditor/ckeditor5-alignment": "^38.1.0",
|
||||||
"@ckeditor/ckeditor5-build-balloon": "^35.2.1",
|
"@ckeditor/ckeditor5-build-balloon": "^38.1.0",
|
||||||
"@ckeditor/ckeditor5-build-balloon-block": "^35.2.1",
|
"@ckeditor/ckeditor5-build-balloon-block": "^38.1.0",
|
||||||
"@ckeditor/ckeditor5-build-classic": "^35.2.1",
|
"@ckeditor/ckeditor5-build-classic": "^38.1.0",
|
||||||
"@ckeditor/ckeditor5-build-decoupled-document": "^35.2.1",
|
"@ckeditor/ckeditor5-build-decoupled-document": "^38.1.0",
|
||||||
"@ckeditor/ckeditor5-build-inline": "^35.2.1",
|
"@ckeditor/ckeditor5-build-inline": "^38.1.0",
|
||||||
"@eonasdan/tempus-dominus": "^6.2.10",
|
"@eonasdan/tempus-dominus": "^6.7.7",
|
||||||
"@fortawesome/fontawesome-free": "^6.1.1",
|
"@fortawesome/fontawesome-free": "^6.4.0",
|
||||||
"@popperjs/core": "2.11.6",
|
"@popperjs/core": "2.11.8",
|
||||||
"@shopify/draggable": "^1.0.0-beta.12",
|
"@shopify/draggable": "^1.0.0-beta.12",
|
||||||
"@yaireo/tagify": "^4.9.2",
|
"@yaireo/tagify": "^4.17.8",
|
||||||
"acorn": "^8.0.4",
|
"acorn": "^8.9.0",
|
||||||
"apexcharts": "^3.36.3",
|
"apexcharts": "3.41.0",
|
||||||
"autosize": "^5.0.1",
|
"autosize": "^6.0.1",
|
||||||
"axios": "^0.21.1",
|
"axios": "^1.4.0",
|
||||||
"bootstrap": "5.3.0-alpha1",
|
"bootstrap": "5.3.0",
|
||||||
"bootstrap-cookie-alert": "^1.2.1",
|
"bootstrap-cookie-alert": "^1.2.1",
|
||||||
"bootstrap-daterangepicker": "^3.1.0",
|
"bootstrap-daterangepicker": "^3.1.0",
|
||||||
"bootstrap-icons": "^1.5.0",
|
"bootstrap-icons": "^1.5.0",
|
||||||
@ -36,28 +36,28 @@
|
|||||||
"clipboard": "^2.0.8",
|
"clipboard": "^2.0.8",
|
||||||
"countup.js": "^2.0.7",
|
"countup.js": "^2.0.7",
|
||||||
"cropperjs": "^1.5.12",
|
"cropperjs": "^1.5.12",
|
||||||
"datatables.net": "^1.12.1",
|
"datatables.net": "^1.13.4",
|
||||||
"datatables.net-bs5": "^1.12.1",
|
"datatables.net-bs5": "^1.13.4",
|
||||||
"datatables.net-buttons": "^2.2.3",
|
"datatables.net-buttons": "^2.3.6",
|
||||||
"datatables.net-buttons-bs5": "^2.2.3",
|
"datatables.net-buttons-bs5": "^2.3.6",
|
||||||
"datatables.net-colreorder": "^1.5.6",
|
"datatables.net-colreorder": "^1.6.2",
|
||||||
"datatables.net-colreorder-bs5": "^1.5.6",
|
"datatables.net-colreorder-bs5": "^1.6.2",
|
||||||
"datatables.net-datetime": "^1.1.2",
|
"datatables.net-datetime": "^1.4.1",
|
||||||
"datatables.net-fixedcolumns": "^4.1.0",
|
"datatables.net-fixedcolumns": "^4.2.2",
|
||||||
"datatables.net-fixedcolumns-bs5": "^4.1.0",
|
"datatables.net-fixedcolumns-bs5": "^4.2.2",
|
||||||
"datatables.net-fixedheader": "^3.2.3",
|
"datatables.net-fixedheader": "^3.3.2",
|
||||||
"datatables.net-fixedheader-bs5": "^3.2.3",
|
"datatables.net-fixedheader-bs5": "^3.3.2",
|
||||||
"datatables.net-plugins": "^1.11.5",
|
"datatables.net-plugins": "^1.13.4",
|
||||||
"datatables.net-responsive": "^2.3.0",
|
"datatables.net-responsive": "^2.4.1",
|
||||||
"datatables.net-responsive-bs5": "^2.3.0",
|
"datatables.net-responsive-bs5": "^2.4.1",
|
||||||
"datatables.net-rowgroup": "^1.2.0",
|
"datatables.net-rowgroup": "^1.3.1",
|
||||||
"datatables.net-rowgroup-bs5": "^1.2.0",
|
"datatables.net-rowgroup-bs5": "^1.3.1",
|
||||||
"datatables.net-rowreorder": "^1.2.8",
|
"datatables.net-rowreorder": "^1.3.3",
|
||||||
"datatables.net-rowreorder-bs5": "^1.2.8",
|
"datatables.net-rowreorder-bs5": "^1.3.3",
|
||||||
"datatables.net-scroller": "^2.0.6",
|
"datatables.net-scroller": "^2.1.1",
|
||||||
"datatables.net-scroller-bs5": "^2.0.6",
|
"datatables.net-scroller-bs5": "^2.1.1",
|
||||||
"datatables.net-select": "^1.4.0",
|
"datatables.net-select": "^1.6.2",
|
||||||
"datatables.net-select-bs5": "^1.4.0",
|
"datatables.net-select-bs5": "^1.6.2",
|
||||||
"dropzone": "^5.9.2",
|
"dropzone": "^5.9.2",
|
||||||
"es6-promise": "^4.2.8",
|
"es6-promise": "^4.2.8",
|
||||||
"es6-promise-polyfill": "^1.2.0",
|
"es6-promise-polyfill": "^1.2.0",
|
||||||
@ -92,15 +92,15 @@
|
|||||||
"tiny-slider": "^2.9.3",
|
"tiny-slider": "^2.9.3",
|
||||||
"tinymce": "^5.8.2",
|
"tinymce": "^5.8.2",
|
||||||
"toastr": "^2.1.4",
|
"toastr": "^2.1.4",
|
||||||
"typed.js": "2.0.12",
|
"typed.js": "2.0.16",
|
||||||
"vis-timeline": "^7.4.9",
|
"vis-timeline": "^7.4.9",
|
||||||
"wnumb": "^1.2.0"
|
"wnumb": "^1.2.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"alpinejs": "^3.7.1",
|
"alpinejs": "^3.7.1",
|
||||||
"autoprefixer": "^10.4.2",
|
"autoprefixer": "^10.4.2",
|
||||||
"axios": "^1.1.3",
|
|
||||||
"del": "^6.0.0",
|
"del": "^6.0.0",
|
||||||
|
"laravel-datatables-vite": "^0.5.2",
|
||||||
"laravel-mix": "^6.0.39",
|
"laravel-mix": "^6.0.39",
|
||||||
"laravel-mix-purgecss": "^6.0.0",
|
"laravel-mix-purgecss": "^6.0.0",
|
||||||
"lodash": "^4.17.19",
|
"lodash": "^4.17.19",
|
||||||
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 18 KiB |
@ -243,27 +243,30 @@ var KTApp = function () {
|
|||||||
|
|
||||||
$(element).select2(options);
|
$(element).select2(options);
|
||||||
|
|
||||||
|
// Handle Select2's KTMenu parent case
|
||||||
|
if (element.hasAttribute('data-dropdown-parent') && element.hasAttribute('multiple')) {
|
||||||
|
var parentEl = document.querySelector(element.getAttribute('data-dropdown-parent'));
|
||||||
|
|
||||||
|
if (parentEl && parentEl.hasAttribute("data-kt-menu")) {
|
||||||
|
var menu = new KTMenu(parentEl);
|
||||||
|
|
||||||
|
if (menu) {
|
||||||
|
$(element).on('select2:unselect', function (e) {
|
||||||
|
element.setAttribute("data-multiple-unselect", "1");
|
||||||
|
});
|
||||||
|
|
||||||
|
menu.on("kt.menu.dropdown.hide", function(item) {
|
||||||
|
if (element.getAttribute("data-multiple-unselect") === "1") {
|
||||||
|
element.removeAttribute("data-multiple-unselect");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
element.setAttribute("data-kt-initialized", "1");
|
element.setAttribute("data-kt-initialized", "1");
|
||||||
});
|
});
|
||||||
|
|
||||||
/*
|
|
||||||
* Hacky fix for a bug in select2 with jQuery 3.6.0's new nested-focus "protection"
|
|
||||||
* see: https://github.com/select2/select2/issues/5993
|
|
||||||
* see: https://github.com/jquery/jquery/issues/4382
|
|
||||||
*
|
|
||||||
* TODO: Recheck with the select2 GH issue and remove once this is fixed on their side
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (select2FocusFixInitialized === false) {
|
|
||||||
select2FocusFixInitialized = true;
|
|
||||||
|
|
||||||
$(document).on('select2:open', function(e) {
|
|
||||||
var elements = document.querySelectorAll('.select2-container--open .select2-search__field');
|
|
||||||
if (elements.length > 0) {
|
|
||||||
elements[elements.length - 1].focus();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var createAutosize = function () {
|
var createAutosize = function () {
|
||||||
@ -529,7 +532,7 @@ var KTApp = function () {
|
|||||||
const modalEl = document.querySelector(this.getAttribute("data-bs-stacked-modal"));
|
const modalEl = document.querySelector(this.getAttribute("data-bs-stacked-modal"));
|
||||||
|
|
||||||
if (modalEl) {
|
if (modalEl) {
|
||||||
const modal = new bootstrap.Modal(modalEl);
|
const modal = new bootstrap.Modal(modalEl, {backdrop: false});
|
||||||
modal.show();
|
modal.show();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -407,6 +407,29 @@ KTDrawer.handleShow = function() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Handle escape key press
|
||||||
|
KTDrawer.handleEscapeKey = function() {
|
||||||
|
document.addEventListener('keydown', (event) => {
|
||||||
|
if (event.key === 'Escape') {
|
||||||
|
//if esc key was not pressed in combination with ctrl or alt or shift
|
||||||
|
const isNotCombinedKey = !(event.ctrlKey || event.altKey || event.shiftKey);
|
||||||
|
if (isNotCombinedKey) {
|
||||||
|
var elements = document.querySelectorAll('.drawer-on[data-kt-drawer="true"]:not([data-kt-drawer-escape="false"])');
|
||||||
|
var drawer;
|
||||||
|
|
||||||
|
if ( elements && elements.length > 0 ) {
|
||||||
|
for (var i = 0, len = elements.length; i < len; i++) {
|
||||||
|
drawer = KTDrawer.getInstance(elements[i]);
|
||||||
|
if (drawer.isShown()) {
|
||||||
|
drawer.hide();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Dismiss instances
|
// Dismiss instances
|
||||||
KTDrawer.handleDismiss = function() {
|
KTDrawer.handleDismiss = function() {
|
||||||
// External drawer toggle handler
|
// External drawer toggle handler
|
||||||
@ -452,6 +475,7 @@ KTDrawer.init = function() {
|
|||||||
KTDrawer.handleResize();
|
KTDrawer.handleResize();
|
||||||
KTDrawer.handleShow();
|
KTDrawer.handleShow();
|
||||||
KTDrawer.handleDismiss();
|
KTDrawer.handleDismiss();
|
||||||
|
KTDrawer.handleEscapeKey();
|
||||||
|
|
||||||
KTDrawerHandlersInitialized = true;
|
KTDrawerHandlersInitialized = true;
|
||||||
}
|
}
|
||||||
|
@ -362,7 +362,7 @@ var KTMenu = function(element, options) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Item is parent of element
|
// Item is parent of element
|
||||||
if ( (item = element.closest('.menu-item[data-kt-menu-trigger]')) ) {
|
if ( (item = element.closest('.menu-item')) ) {
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -689,6 +689,11 @@ var KTMenu = function(element, options) {
|
|||||||
|
|
||||||
var _setActiveLink = function(link) {
|
var _setActiveLink = function(link) {
|
||||||
var item = _getItemElement(link);
|
var item = _getItemElement(link);
|
||||||
|
|
||||||
|
if (!item) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
var parentItems = _getItemParentElements(item);
|
var parentItems = _getItemParentElements(item);
|
||||||
var parentTabPane = link.closest('.tab-pane');
|
var parentTabPane = link.closest('.tab-pane');
|
||||||
|
|
||||||
@ -738,7 +743,7 @@ var KTMenu = function(element, options) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var _getLinkByAttribute = function(value, name = "href") {
|
var _getLinkByAttribute = function(value, name = "href") {
|
||||||
var link = the.element.querySelector('a[' + name + '="' + value + '"]');
|
var link = the.element.querySelector('.menu-link[' + name + '="' + value + '"]');
|
||||||
|
|
||||||
if (link) {
|
if (link) {
|
||||||
return link;
|
return link;
|
||||||
|
@ -68,6 +68,7 @@ var KTSticky = function(element, options) {
|
|||||||
|
|
||||||
// Exit if false
|
// Exit if false
|
||||||
if ( offset === false ) {
|
if ( offset === false ) {
|
||||||
|
_disable();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,9 +11,9 @@ var KTAuthNewPassword = function() {
|
|||||||
var handleForm = function(e) {
|
var handleForm = function(e) {
|
||||||
// Init form validation rules. For more info check the FormValidation plugin's official documentation:https://formvalidation.io/
|
// Init form validation rules. For more info check the FormValidation plugin's official documentation:https://formvalidation.io/
|
||||||
validator = FormValidation.formValidation(
|
validator = FormValidation.formValidation(
|
||||||
form,
|
form,
|
||||||
{
|
{
|
||||||
fields: {
|
fields: {
|
||||||
'password': {
|
'password': {
|
||||||
validators: {
|
validators: {
|
||||||
notEmpty: {
|
notEmpty: {
|
||||||
@ -49,29 +49,38 @@ var KTAuthNewPassword = function() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
plugins: {
|
plugins: {
|
||||||
trigger: new FormValidation.plugins.Trigger({
|
trigger: new FormValidation.plugins.Trigger({
|
||||||
event: {
|
event: {
|
||||||
password: false
|
password: false
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
bootstrap: new FormValidation.plugins.Bootstrap5({
|
bootstrap: new FormValidation.plugins.Bootstrap5({
|
||||||
rowSelector: '.fv-row',
|
rowSelector: '.fv-row',
|
||||||
eleInvalidClass: '', // comment to enable invalid state icons
|
eleInvalidClass: '', // comment to enable invalid state icons
|
||||||
eleValidClass: '' // comment to enable valid state icons
|
eleValidClass: '' // comment to enable valid state icons
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
form.querySelector('input[name="password"]').addEventListener('input', function() {
|
||||||
|
if (this.value.length > 0) {
|
||||||
|
validator.updateFieldStatus('password', 'NotValidated');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
var handleSubmitDemo = function (e) {
|
||||||
submitButton.addEventListener('click', function (e) {
|
submitButton.addEventListener('click', function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|
||||||
validator.revalidateField('password');
|
validator.revalidateField('password');
|
||||||
|
|
||||||
validator.validate().then(function(status) {
|
validator.validate().then(function(status) {
|
||||||
if (status == 'Valid') {
|
if (status == 'Valid') {
|
||||||
// Show loading indication
|
// Show loading indication
|
||||||
submitButton.setAttribute('data-kt-indicator', 'on');
|
submitButton.setAttribute('data-kt-indicator', 'on');
|
||||||
|
|
||||||
@ -121,18 +130,94 @@ var KTAuthNewPassword = function() {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
form.querySelector('input[name="password"]').addEventListener('input', function() {
|
}
|
||||||
if (this.value.length > 0) {
|
|
||||||
validator.updateFieldStatus('password', 'NotValidated');
|
var handleSubmitAjax = function (e) {
|
||||||
}
|
// Handle form submit
|
||||||
|
submitButton.addEventListener('click', function (e) {
|
||||||
|
// Prevent button default action
|
||||||
|
e.preventDefault();
|
||||||
|
|
||||||
|
validator.revalidateField('password');
|
||||||
|
|
||||||
|
// Validate form
|
||||||
|
validator.validate().then(function (status) {
|
||||||
|
if (status == 'Valid') {
|
||||||
|
// Show loading indication
|
||||||
|
submitButton.setAttribute('data-kt-indicator', 'on');
|
||||||
|
|
||||||
|
// Disable button to avoid multiple click
|
||||||
|
submitButton.disabled = true;
|
||||||
|
|
||||||
|
// Check axios library docs: https://axios-http.com/docs/intro
|
||||||
|
axios.post(submitButton.closest('form').getAttribute('action'), new FormData(form)).then(function (response) {
|
||||||
|
if (response) {
|
||||||
|
form.reset();
|
||||||
|
|
||||||
|
const redirectUrl = form.getAttribute('data-kt-redirect-url');
|
||||||
|
|
||||||
|
if (redirectUrl) {
|
||||||
|
location.href = redirectUrl;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Show error popup. For more info check the plugin's official documentation: https://sweetalert2.github.io/
|
||||||
|
Swal.fire({
|
||||||
|
text: "Sorry, the email is incorrect, please try again.",
|
||||||
|
icon: "error",
|
||||||
|
buttonsStyling: false,
|
||||||
|
confirmButtonText: "Ok, got it!",
|
||||||
|
customClass: {
|
||||||
|
confirmButton: "btn btn-primary"
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}).catch(function (error) {
|
||||||
|
Swal.fire({
|
||||||
|
text: "Sorry, looks like there are some errors detected, please try again.",
|
||||||
|
icon: "error",
|
||||||
|
buttonsStyling: false,
|
||||||
|
confirmButtonText: "Ok, got it!",
|
||||||
|
customClass: {
|
||||||
|
confirmButton: "btn btn-primary"
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}).then(() => {
|
||||||
|
// Hide loading indication
|
||||||
|
submitButton.removeAttribute('data-kt-indicator');
|
||||||
|
|
||||||
|
// Enable button
|
||||||
|
submitButton.disabled = false;
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
// Show error popup. For more info check the plugin's official documentation: https://sweetalert2.github.io/
|
||||||
|
Swal.fire({
|
||||||
|
text: "Sorry, looks like there are some errors detected, please try again.",
|
||||||
|
icon: "error",
|
||||||
|
buttonsStyling: false,
|
||||||
|
confirmButtonText: "Ok, got it!",
|
||||||
|
customClass: {
|
||||||
|
confirmButton: "btn btn-primary"
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
var validatePassword = function() {
|
var validatePassword = function() {
|
||||||
return (passwordMeter.getScore() === 100);
|
return (passwordMeter.getScore() > 50);
|
||||||
|
}
|
||||||
|
|
||||||
|
var isValidUrl = function(url) {
|
||||||
|
try {
|
||||||
|
new URL(url);
|
||||||
|
return true;
|
||||||
|
} catch (e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Public Functions
|
// Public Functions
|
||||||
@ -144,6 +229,12 @@ var KTAuthNewPassword = function() {
|
|||||||
passwordMeter = KTPasswordMeter.getInstance(form.querySelector('[data-kt-password-meter="true"]'));
|
passwordMeter = KTPasswordMeter.getInstance(form.querySelector('[data-kt-password-meter="true"]'));
|
||||||
|
|
||||||
handleForm();
|
handleForm();
|
||||||
|
|
||||||
|
if (isValidUrl(form.getAttribute('action'))) {
|
||||||
|
handleSubmitAjax(); // use for ajax submit
|
||||||
|
} else {
|
||||||
|
handleSubmitDemo(); // used for demo purposes only
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}();
|
}();
|
||||||
|
@ -1,41 +1,44 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
// Class Definition
|
// Class Definition
|
||||||
var KTAuthResetPassword = function() {
|
var KTAuthResetPassword = function () {
|
||||||
// Elements
|
// Elements
|
||||||
var form;
|
var form;
|
||||||
var submitButton;
|
var submitButton;
|
||||||
var validator;
|
var validator;
|
||||||
|
|
||||||
var handleForm = function(e) {
|
var handleForm = function (e) {
|
||||||
// Init form validation rules. For more info check the FormValidation plugin's official documentation:https://formvalidation.io/
|
// Init form validation rules. For more info check the FormValidation plugin's official documentation:https://formvalidation.io/
|
||||||
validator = FormValidation.formValidation(
|
validator = FormValidation.formValidation(
|
||||||
form,
|
form,
|
||||||
{
|
{
|
||||||
fields: {
|
fields: {
|
||||||
'email': {
|
'email': {
|
||||||
validators: {
|
validators: {
|
||||||
regexp: {
|
regexp: {
|
||||||
regexp: /^[^\s@]+@[^\s@]+\.[^\s@]+$/,
|
regexp: /^[^\s@]+@[^\s@]+\.[^\s@]+$/,
|
||||||
message: 'The value is not a valid email address',
|
message: 'The value is not a valid email address',
|
||||||
},
|
},
|
||||||
notEmpty: {
|
notEmpty: {
|
||||||
message: 'Email address is required'
|
message: 'Email address is required'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
plugins: {
|
plugins: {
|
||||||
trigger: new FormValidation.plugins.Trigger(),
|
trigger: new FormValidation.plugins.Trigger(),
|
||||||
bootstrap: new FormValidation.plugins.Bootstrap5({
|
bootstrap: new FormValidation.plugins.Bootstrap5({
|
||||||
rowSelector: '.fv-row',
|
rowSelector: '.fv-row',
|
||||||
eleInvalidClass: '', // comment to enable invalid state icons
|
eleInvalidClass: '', // comment to enable invalid state icons
|
||||||
eleValidClass: '' // comment to enable valid state icons
|
eleValidClass: '' // comment to enable valid state icons
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
var handleSubmitDemo = function (e) {
|
||||||
submitButton.addEventListener('click', function (e) {
|
submitButton.addEventListener('click', function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|
||||||
@ -49,7 +52,7 @@ var KTAuthResetPassword = function() {
|
|||||||
submitButton.disabled = true;
|
submitButton.disabled = true;
|
||||||
|
|
||||||
// Simulate ajax request
|
// Simulate ajax request
|
||||||
setTimeout(function() {
|
setTimeout(function () {
|
||||||
// Hide loading indication
|
// Hide loading indication
|
||||||
submitButton.removeAttribute('data-kt-indicator');
|
submitButton.removeAttribute('data-kt-indicator');
|
||||||
|
|
||||||
@ -67,7 +70,7 @@ var KTAuthResetPassword = function() {
|
|||||||
}
|
}
|
||||||
}).then(function (result) {
|
}).then(function (result) {
|
||||||
if (result.isConfirmed) {
|
if (result.isConfirmed) {
|
||||||
form.querySelector('[name="email"]').value= "";
|
form.querySelector('[name="email"]').value = "";
|
||||||
//form.submit();
|
//form.submit();
|
||||||
|
|
||||||
var redirectUrl = form.getAttribute('data-kt-redirect-url');
|
var redirectUrl = form.getAttribute('data-kt-redirect-url');
|
||||||
@ -90,22 +93,118 @@ var KTAuthResetPassword = function() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
var handleSubmitAjax = function (e) {
|
||||||
|
// Handle form submit
|
||||||
|
submitButton.addEventListener('click', function (e) {
|
||||||
|
// Prevent button default action
|
||||||
|
e.preventDefault();
|
||||||
|
|
||||||
|
// Validate form
|
||||||
|
validator.validate().then(function (status) {
|
||||||
|
if (status == 'Valid') {
|
||||||
|
// Show loading indication
|
||||||
|
submitButton.setAttribute('data-kt-indicator', 'on');
|
||||||
|
|
||||||
|
// Disable button to avoid multiple click
|
||||||
|
submitButton.disabled = true;
|
||||||
|
|
||||||
|
// Check axios library docs: https://axios-http.com/docs/intro
|
||||||
|
axios.post(submitButton.closest('form').getAttribute('action'), new FormData(form)).then(function (response) {
|
||||||
|
if (response) {
|
||||||
|
form.reset();
|
||||||
|
|
||||||
|
// Show message popup. For more info check the plugin's official documentation: https://sweetalert2.github.io/
|
||||||
|
Swal.fire({
|
||||||
|
text: "We have send a password reset link to your email.",
|
||||||
|
icon: "success",
|
||||||
|
buttonsStyling: false,
|
||||||
|
confirmButtonText: "Ok, got it!",
|
||||||
|
customClass: {
|
||||||
|
confirmButton: "btn btn-primary"
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const redirectUrl = form.getAttribute('data-kt-redirect-url');
|
||||||
|
|
||||||
|
if (redirectUrl) {
|
||||||
|
location.href = redirectUrl;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Show error popup. For more info check the plugin's official documentation: https://sweetalert2.github.io/
|
||||||
|
Swal.fire({
|
||||||
|
text: "Sorry, the email is incorrect, please try again.",
|
||||||
|
icon: "error",
|
||||||
|
buttonsStyling: false,
|
||||||
|
confirmButtonText: "Ok, got it!",
|
||||||
|
customClass: {
|
||||||
|
confirmButton: "btn btn-primary"
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}).catch(function (error) {
|
||||||
|
Swal.fire({
|
||||||
|
text: "Sorry, looks like there are some errors detected, please try again.",
|
||||||
|
icon: "error",
|
||||||
|
buttonsStyling: false,
|
||||||
|
confirmButtonText: "Ok, got it!",
|
||||||
|
customClass: {
|
||||||
|
confirmButton: "btn btn-primary"
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}).then(() => {
|
||||||
|
// Hide loading indication
|
||||||
|
submitButton.removeAttribute('data-kt-indicator');
|
||||||
|
|
||||||
|
// Enable button
|
||||||
|
submitButton.disabled = false;
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
// Show error popup. For more info check the plugin's official documentation: https://sweetalert2.github.io/
|
||||||
|
Swal.fire({
|
||||||
|
text: "Sorry, looks like there are some errors detected, please try again.",
|
||||||
|
icon: "error",
|
||||||
|
buttonsStyling: false,
|
||||||
|
confirmButtonText: "Ok, got it!",
|
||||||
|
customClass: {
|
||||||
|
confirmButton: "btn btn-primary"
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
var isValidUrl = function(url) {
|
||||||
|
try {
|
||||||
|
new URL(url);
|
||||||
|
return true;
|
||||||
|
} catch (e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Public Functions
|
// Public Functions
|
||||||
return {
|
return {
|
||||||
// public functions
|
// public functions
|
||||||
init: function() {
|
init: function () {
|
||||||
form = document.querySelector('#kt_password_reset_form');
|
form = document.querySelector('#kt_password_reset_form');
|
||||||
submitButton = document.querySelector('#kt_password_reset_submit');
|
submitButton = document.querySelector('#kt_password_reset_submit');
|
||||||
|
|
||||||
handleForm();
|
handleForm();
|
||||||
|
|
||||||
|
if (isValidUrl(form.getAttribute('action'))) {
|
||||||
|
handleSubmitAjax(); // use for ajax submit
|
||||||
|
} else {
|
||||||
|
handleSubmitDemo(); // used for demo purposes only
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}();
|
}();
|
||||||
|
|
||||||
// On document ready
|
// On document ready
|
||||||
KTUtil.onDOMContentLoaded(function() {
|
KTUtil.onDOMContentLoaded(function () {
|
||||||
KTAuthResetPassword.init();
|
KTAuthResetPassword.init();
|
||||||
});
|
});
|
||||||
|
@ -1,30 +1,30 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
// Class definition
|
// Class definition
|
||||||
var KTSigninGeneral = function() {
|
var KTSigninGeneral = function () {
|
||||||
// Elements
|
// Elements
|
||||||
var form;
|
var form;
|
||||||
var submitButton;
|
var submitButton;
|
||||||
var validator;
|
var validator;
|
||||||
|
|
||||||
// Handle form
|
// Handle form
|
||||||
var handleValidation = function(e) {
|
var handleValidation = function (e) {
|
||||||
// Init form validation rules. For more info check the FormValidation plugin's official documentation:https://formvalidation.io/
|
// Init form validation rules. For more info check the FormValidation plugin's official documentation:https://formvalidation.io/
|
||||||
validator = FormValidation.formValidation(
|
validator = FormValidation.formValidation(
|
||||||
form,
|
form,
|
||||||
{
|
{
|
||||||
fields: {
|
fields: {
|
||||||
'email': {
|
'email': {
|
||||||
validators: {
|
validators: {
|
||||||
regexp: {
|
regexp: {
|
||||||
regexp: /^[^\s@]+@[^\s@]+\.[^\s@]+$/,
|
regexp: /^[^\s@]+@[^\s@]+\.[^\s@]+$/,
|
||||||
message: 'The value is not a valid email address',
|
message: 'The value is not a valid email address',
|
||||||
},
|
},
|
||||||
notEmpty: {
|
notEmpty: {
|
||||||
message: 'Email address is required'
|
message: 'Email address is required'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'password': {
|
'password': {
|
||||||
validators: {
|
validators: {
|
||||||
notEmpty: {
|
notEmpty: {
|
||||||
@ -32,20 +32,20 @@ var KTSigninGeneral = function() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
plugins: {
|
plugins: {
|
||||||
trigger: new FormValidation.plugins.Trigger(),
|
trigger: new FormValidation.plugins.Trigger(),
|
||||||
bootstrap: new FormValidation.plugins.Bootstrap5({
|
bootstrap: new FormValidation.plugins.Bootstrap5({
|
||||||
rowSelector: '.fv-row',
|
rowSelector: '.fv-row',
|
||||||
eleInvalidClass: '', // comment to enable invalid state icons
|
eleInvalidClass: '', // comment to enable invalid state icons
|
||||||
eleValidClass: '' // comment to enable valid state icons
|
eleValidClass: '' // comment to enable valid state icons
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
var handleSubmitDemo = function(e) {
|
var handleSubmitDemo = function (e) {
|
||||||
// Handle form submit
|
// Handle form submit
|
||||||
submitButton.addEventListener('click', function (e) {
|
submitButton.addEventListener('click', function (e) {
|
||||||
// Prevent button default action
|
// Prevent button default action
|
||||||
@ -62,7 +62,7 @@ var KTSigninGeneral = function() {
|
|||||||
|
|
||||||
|
|
||||||
// Simulate ajax request
|
// Simulate ajax request
|
||||||
setTimeout(function() {
|
setTimeout(function () {
|
||||||
// Hide loading indication
|
// Hide loading indication
|
||||||
submitButton.removeAttribute('data-kt-indicator');
|
submitButton.removeAttribute('data-kt-indicator');
|
||||||
|
|
||||||
@ -80,8 +80,8 @@ var KTSigninGeneral = function() {
|
|||||||
}
|
}
|
||||||
}).then(function (result) {
|
}).then(function (result) {
|
||||||
if (result.isConfirmed) {
|
if (result.isConfirmed) {
|
||||||
form.querySelector('[name="email"]').value= "";
|
form.querySelector('[name="email"]').value = "";
|
||||||
form.querySelector('[name="password"]').value= "";
|
form.querySelector('[name="password"]').value = "";
|
||||||
|
|
||||||
//form.submit(); // submit form
|
//form.submit(); // submit form
|
||||||
var redirectUrl = form.getAttribute('data-kt-redirect-url');
|
var redirectUrl = form.getAttribute('data-kt-redirect-url');
|
||||||
@ -104,10 +104,10 @@ var KTSigninGeneral = function() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
var handleSubmitAjax = function(e) {
|
var handleSubmitAjax = function (e) {
|
||||||
// Handle form submit
|
// Handle form submit
|
||||||
submitButton.addEventListener('click', function (e) {
|
submitButton.addEventListener('click', function (e) {
|
||||||
// Prevent button default action
|
// Prevent button default action
|
||||||
@ -116,20 +116,27 @@ var KTSigninGeneral = function() {
|
|||||||
// Validate form
|
// Validate form
|
||||||
validator.validate().then(function (status) {
|
validator.validate().then(function (status) {
|
||||||
if (status == 'Valid') {
|
if (status == 'Valid') {
|
||||||
// Hide loading indication
|
// Show loading indication
|
||||||
submitButton.removeAttribute('data-kt-indicator');
|
submitButton.setAttribute('data-kt-indicator', 'on');
|
||||||
|
|
||||||
// Enable button
|
// Disable button to avoid multiple click
|
||||||
submitButton.disabled = false;
|
submitButton.disabled = true;
|
||||||
|
|
||||||
// Check axios library docs: https://axios-http.com/docs/intro
|
// Check axios library docs: https://axios-http.com/docs/intro
|
||||||
axios.post('/your/ajax/login/url', {
|
axios.post(submitButton.closest('form').getAttribute('action'), new FormData(form)).then(function (response) {
|
||||||
email: form.querySelector('[name="email"]').value,
|
|
||||||
password: form.querySelector('[name="password"]').value
|
|
||||||
}).then(function (response) {
|
|
||||||
if (response) {
|
if (response) {
|
||||||
form.querySelector('[name="email"]').value= "";
|
form.reset();
|
||||||
form.querySelector('[name="password"]').value= "";
|
|
||||||
|
// Show message popup. For more info check the plugin's official documentation: https://sweetalert2.github.io/
|
||||||
|
Swal.fire({
|
||||||
|
text: "You have successfully logged in!",
|
||||||
|
icon: "success",
|
||||||
|
buttonsStyling: false,
|
||||||
|
confirmButtonText: "Ok, got it!",
|
||||||
|
customClass: {
|
||||||
|
confirmButton: "btn btn-primary"
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
const redirectUrl = form.getAttribute('data-kt-redirect-url');
|
const redirectUrl = form.getAttribute('data-kt-redirect-url');
|
||||||
|
|
||||||
@ -158,6 +165,12 @@ var KTSigninGeneral = function() {
|
|||||||
confirmButton: "btn btn-primary"
|
confirmButton: "btn btn-primary"
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
}).then(() => {
|
||||||
|
// Hide loading indication
|
||||||
|
submitButton.removeAttribute('data-kt-indicator');
|
||||||
|
|
||||||
|
// Enable button
|
||||||
|
submitButton.disabled = false;
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
// Show error popup. For more info check the plugin's official documentation: https://sweetalert2.github.io/
|
// Show error popup. For more info check the plugin's official documentation: https://sweetalert2.github.io/
|
||||||
@ -172,24 +185,37 @@ var KTSigninGeneral = function() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
var isValidUrl = function(url) {
|
||||||
|
try {
|
||||||
|
new URL(url);
|
||||||
|
return true;
|
||||||
|
} catch (e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Public functions
|
// Public functions
|
||||||
return {
|
return {
|
||||||
// Initialization
|
// Initialization
|
||||||
init: function() {
|
init: function () {
|
||||||
form = document.querySelector('#kt_sign_in_form');
|
form = document.querySelector('#kt_sign_in_form');
|
||||||
submitButton = document.querySelector('#kt_sign_in_submit');
|
submitButton = document.querySelector('#kt_sign_in_submit');
|
||||||
|
|
||||||
handleValidation();
|
handleValidation();
|
||||||
handleSubmitDemo(); // used for demo purposes only, if you use the below ajax version you can uncomment this one
|
|
||||||
//handleSubmitAjax(); // use for ajax submit
|
if (isValidUrl(submitButton.closest('form').getAttribute('action'))) {
|
||||||
|
handleSubmitAjax(); // use for ajax submit
|
||||||
|
} else {
|
||||||
|
handleSubmitDemo(); // used for demo purposes only
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}();
|
}();
|
||||||
|
|
||||||
// On document ready
|
// On document ready
|
||||||
KTUtil.onDOMContentLoaded(function() {
|
KTUtil.onDOMContentLoaded(function () {
|
||||||
KTSigninGeneral.init();
|
KTSigninGeneral.init();
|
||||||
});
|
});
|
||||||
|
@ -144,7 +144,7 @@ var KTSignupFreeTrial = function() {
|
|||||||
|
|
||||||
// Password input validation
|
// Password input validation
|
||||||
var validatePassword = function() {
|
var validatePassword = function() {
|
||||||
return (passwordMeter.getScore() === 100);
|
return (passwordMeter.getScore() > 50);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Public functions
|
// Public functions
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
// Class definition
|
// Class definition
|
||||||
var KTSignupGeneral = function() {
|
var KTSignupGeneral = function () {
|
||||||
// Elements
|
// Elements
|
||||||
var form;
|
var form;
|
||||||
var submitButton;
|
var submitButton;
|
||||||
@ -9,37 +9,37 @@ var KTSignupGeneral = function() {
|
|||||||
var passwordMeter;
|
var passwordMeter;
|
||||||
|
|
||||||
// Handle form
|
// Handle form
|
||||||
var handleForm = function(e) {
|
var handleForm = function (e) {
|
||||||
// Init form validation rules. For more info check the FormValidation plugin's official documentation:https://formvalidation.io/
|
// Init form validation rules. For more info check the FormValidation plugin's official documentation:https://formvalidation.io/
|
||||||
validator = FormValidation.formValidation(
|
validator = FormValidation.formValidation(
|
||||||
form,
|
form,
|
||||||
{
|
{
|
||||||
fields: {
|
fields: {
|
||||||
'first-name': {
|
'first-name': {
|
||||||
validators: {
|
validators: {
|
||||||
notEmpty: {
|
notEmpty: {
|
||||||
message: 'First Name is required'
|
message: 'First Name is required'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'last-name': {
|
'last-name': {
|
||||||
validators: {
|
validators: {
|
||||||
notEmpty: {
|
notEmpty: {
|
||||||
message: 'Last Name is required'
|
message: 'Last Name is required'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'email': {
|
'email': {
|
||||||
validators: {
|
validators: {
|
||||||
regexp: {
|
regexp: {
|
||||||
regexp: /^[^\s@]+@[^\s@]+\.[^\s@]+$/,
|
regexp: /^[^\s@]+@[^\s@]+\.[^\s@]+$/,
|
||||||
message: 'The value is not a valid email address',
|
message: 'The value is not a valid email address',
|
||||||
},
|
},
|
||||||
notEmpty: {
|
notEmpty: {
|
||||||
message: 'Email address is required'
|
message: 'Email address is required'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'password': {
|
'password': {
|
||||||
validators: {
|
validators: {
|
||||||
notEmpty: {
|
notEmpty: {
|
||||||
@ -47,7 +47,7 @@ var KTSignupGeneral = function() {
|
|||||||
},
|
},
|
||||||
callback: {
|
callback: {
|
||||||
message: 'Please enter valid password',
|
message: 'Please enter valid password',
|
||||||
callback: function(input) {
|
callback: function (input) {
|
||||||
if (input.value.length > 0) {
|
if (input.value.length > 0) {
|
||||||
return validatePassword();
|
return validatePassword();
|
||||||
}
|
}
|
||||||
@ -61,7 +61,7 @@ var KTSignupGeneral = function() {
|
|||||||
message: 'The password confirmation is required'
|
message: 'The password confirmation is required'
|
||||||
},
|
},
|
||||||
identical: {
|
identical: {
|
||||||
compare: function() {
|
compare: function () {
|
||||||
return form.querySelector('[name="password"]').value;
|
return form.querySelector('[name="password"]').value;
|
||||||
},
|
},
|
||||||
message: 'The password and its confirm are not the same'
|
message: 'The password and its confirm are not the same'
|
||||||
@ -75,21 +75,21 @@ var KTSignupGeneral = function() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
plugins: {
|
plugins: {
|
||||||
trigger: new FormValidation.plugins.Trigger({
|
trigger: new FormValidation.plugins.Trigger({
|
||||||
event: {
|
event: {
|
||||||
password: false
|
password: false
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
bootstrap: new FormValidation.plugins.Bootstrap5({
|
bootstrap: new FormValidation.plugins.Bootstrap5({
|
||||||
rowSelector: '.fv-row',
|
rowSelector: '.fv-row',
|
||||||
eleInvalidClass: '', // comment to enable invalid state icons
|
eleInvalidClass: '', // comment to enable invalid state icons
|
||||||
eleValidClass: '' // comment to enable valid state icons
|
eleValidClass: '' // comment to enable valid state icons
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
// Handle form submit
|
// Handle form submit
|
||||||
submitButton.addEventListener('click', function (e) {
|
submitButton.addEventListener('click', function (e) {
|
||||||
@ -97,8 +97,8 @@ var KTSignupGeneral = function() {
|
|||||||
|
|
||||||
validator.revalidateField('password');
|
validator.revalidateField('password');
|
||||||
|
|
||||||
validator.validate().then(function(status) {
|
validator.validate().then(function (status) {
|
||||||
if (status == 'Valid') {
|
if (status == 'Valid') {
|
||||||
// Show loading indication
|
// Show loading indication
|
||||||
submitButton.setAttribute('data-kt-indicator', 'on');
|
submitButton.setAttribute('data-kt-indicator', 'on');
|
||||||
|
|
||||||
@ -106,7 +106,7 @@ var KTSignupGeneral = function() {
|
|||||||
submitButton.disabled = true;
|
submitButton.disabled = true;
|
||||||
|
|
||||||
// Simulate ajax request
|
// Simulate ajax request
|
||||||
setTimeout(function() {
|
setTimeout(function () {
|
||||||
// Hide loading indication
|
// Hide loading indication
|
||||||
submitButton.removeAttribute('data-kt-indicator');
|
submitButton.removeAttribute('data-kt-indicator');
|
||||||
|
|
||||||
@ -148,37 +148,206 @@ var KTSignupGeneral = function() {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
// Handle password input
|
// Handle password input
|
||||||
form.querySelector('input[name="password"]').addEventListener('input', function() {
|
form.querySelector('input[name="password"]').addEventListener('input', function () {
|
||||||
if (this.value.length > 0) {
|
if (this.value.length > 0) {
|
||||||
validator.updateFieldStatus('password', 'NotValidated');
|
validator.updateFieldStatus('password', 'NotValidated');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Handle form ajax
|
||||||
|
var handleFormAjax = function (e) {
|
||||||
|
// Init form validation rules. For more info check the FormValidation plugin's official documentation:https://formvalidation.io/
|
||||||
|
validator = FormValidation.formValidation(
|
||||||
|
form,
|
||||||
|
{
|
||||||
|
fields: {
|
||||||
|
'name': {
|
||||||
|
validators: {
|
||||||
|
notEmpty: {
|
||||||
|
message: 'Name is required'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'email': {
|
||||||
|
validators: {
|
||||||
|
regexp: {
|
||||||
|
regexp: /^[^\s@]+@[^\s@]+\.[^\s@]+$/,
|
||||||
|
message: 'The value is not a valid email address',
|
||||||
|
},
|
||||||
|
notEmpty: {
|
||||||
|
message: 'Email address is required'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'password': {
|
||||||
|
validators: {
|
||||||
|
notEmpty: {
|
||||||
|
message: 'The password is required'
|
||||||
|
},
|
||||||
|
callback: {
|
||||||
|
message: 'Please enter valid password',
|
||||||
|
callback: function (input) {
|
||||||
|
if (input.value.length > 0) {
|
||||||
|
return validatePassword();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'password_confirmation': {
|
||||||
|
validators: {
|
||||||
|
notEmpty: {
|
||||||
|
message: 'The password confirmation is required'
|
||||||
|
},
|
||||||
|
identical: {
|
||||||
|
compare: function () {
|
||||||
|
return form.querySelector('[name="password"]').value;
|
||||||
|
},
|
||||||
|
message: 'The password and its confirm are not the same'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'toc': {
|
||||||
|
validators: {
|
||||||
|
notEmpty: {
|
||||||
|
message: 'You must accept the terms and conditions'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
plugins: {
|
||||||
|
trigger: new FormValidation.plugins.Trigger({
|
||||||
|
event: {
|
||||||
|
password: false
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
bootstrap: new FormValidation.plugins.Bootstrap5({
|
||||||
|
rowSelector: '.fv-row',
|
||||||
|
eleInvalidClass: '', // comment to enable invalid state icons
|
||||||
|
eleValidClass: '' // comment to enable valid state icons
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
// Handle form submit
|
||||||
|
submitButton.addEventListener('click', function (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
|
||||||
|
validator.revalidateField('password');
|
||||||
|
|
||||||
|
validator.validate().then(function (status) {
|
||||||
|
if (status == 'Valid') {
|
||||||
|
// Show loading indication
|
||||||
|
submitButton.setAttribute('data-kt-indicator', 'on');
|
||||||
|
|
||||||
|
// Disable button to avoid multiple click
|
||||||
|
submitButton.disabled = true;
|
||||||
|
|
||||||
|
|
||||||
|
// Check axios library docs: https://axios-http.com/docs/intro
|
||||||
|
axios.post(submitButton.closest('form').getAttribute('action'), new FormData(form)).then(function (response) {
|
||||||
|
if (response) {
|
||||||
|
form.reset();
|
||||||
|
|
||||||
|
const redirectUrl = form.getAttribute('data-kt-redirect-url');
|
||||||
|
|
||||||
|
if (redirectUrl) {
|
||||||
|
location.href = redirectUrl;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Show error popup. For more info check the plugin's official documentation: https://sweetalert2.github.io/
|
||||||
|
Swal.fire({
|
||||||
|
text: "Sorry, looks like there are some errors detected, please try again.",
|
||||||
|
icon: "error",
|
||||||
|
buttonsStyling: false,
|
||||||
|
confirmButtonText: "Ok, got it!",
|
||||||
|
customClass: {
|
||||||
|
confirmButton: "btn btn-primary"
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}).catch(function (error) {
|
||||||
|
Swal.fire({
|
||||||
|
text: "Sorry, looks like there are some errors detected, please try again.",
|
||||||
|
icon: "error",
|
||||||
|
buttonsStyling: false,
|
||||||
|
confirmButtonText: "Ok, got it!",
|
||||||
|
customClass: {
|
||||||
|
confirmButton: "btn btn-primary"
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}).then(() => {
|
||||||
|
// Hide loading indication
|
||||||
|
submitButton.removeAttribute('data-kt-indicator');
|
||||||
|
|
||||||
|
// Enable button
|
||||||
|
submitButton.disabled = false;
|
||||||
|
});
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// Show error popup. For more info check the plugin's official documentation: https://sweetalert2.github.io/
|
||||||
|
Swal.fire({
|
||||||
|
text: "Sorry, looks like there are some errors detected, please try again.",
|
||||||
|
icon: "error",
|
||||||
|
buttonsStyling: false,
|
||||||
|
confirmButtonText: "Ok, got it!",
|
||||||
|
customClass: {
|
||||||
|
confirmButton: "btn btn-primary"
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Handle password input
|
||||||
|
form.querySelector('input[name="password"]').addEventListener('input', function () {
|
||||||
|
if (this.value.length > 0) {
|
||||||
|
validator.updateFieldStatus('password', 'NotValidated');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Password input validation
|
// Password input validation
|
||||||
var validatePassword = function() {
|
var validatePassword = function () {
|
||||||
return (passwordMeter.getScore() === 100);
|
return (passwordMeter.getScore() > 50);
|
||||||
|
}
|
||||||
|
|
||||||
|
var isValidUrl = function(url) {
|
||||||
|
try {
|
||||||
|
new URL(url);
|
||||||
|
return true;
|
||||||
|
} catch (e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Public functions
|
// Public functions
|
||||||
return {
|
return {
|
||||||
// Initialization
|
// Initialization
|
||||||
init: function() {
|
init: function () {
|
||||||
// Elements
|
// Elements
|
||||||
form = document.querySelector('#kt_sign_up_form');
|
form = document.querySelector('#kt_sign_up_form');
|
||||||
submitButton = document.querySelector('#kt_sign_up_submit');
|
submitButton = document.querySelector('#kt_sign_up_submit');
|
||||||
passwordMeter = KTPasswordMeter.getInstance(form.querySelector('[data-kt-password-meter="true"]'));
|
passwordMeter = KTPasswordMeter.getInstance(form.querySelector('[data-kt-password-meter="true"]'));
|
||||||
|
|
||||||
handleForm ();
|
if (isValidUrl(submitButton.closest('form').getAttribute('action'))) {
|
||||||
|
handleFormAjax();
|
||||||
|
} else {
|
||||||
|
handleForm();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}();
|
}();
|
||||||
|
|
||||||
// On document ready
|
// On document ready
|
||||||
KTUtil.onDOMContentLoaded(function() {
|
KTUtil.onDOMContentLoaded(function () {
|
||||||
KTSignupGeneral.init();
|
KTSignupGeneral.init();
|
||||||
});
|
});
|
||||||
|
@ -87,35 +87,38 @@ var KTLayoutSearch = function() {
|
|||||||
|
|
||||||
var handlePreferences = function() {
|
var handlePreferences = function() {
|
||||||
// Preference show handler
|
// Preference show handler
|
||||||
preferencesShowElement.addEventListener('click', function() {
|
if (preferencesShowElement) {
|
||||||
wrapperElement.classList.add('d-none');
|
preferencesShowElement.addEventListener('click', function() {
|
||||||
preferencesElement.classList.remove('d-none');
|
wrapperElement.classList.add('d-none');
|
||||||
});
|
preferencesElement.classList.remove('d-none');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Preference dismiss handler
|
// Preference dismiss handler
|
||||||
preferencesDismissElement.addEventListener('click', function() {
|
if (preferencesDismissElement) {
|
||||||
wrapperElement.classList.remove('d-none');
|
preferencesDismissElement.addEventListener('click', function() {
|
||||||
preferencesElement.classList.add('d-none');
|
wrapperElement.classList.remove('d-none');
|
||||||
});
|
preferencesElement.classList.add('d-none');
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var handleAdvancedOptionsForm = function() {
|
var handleAdvancedOptionsForm = function() {
|
||||||
// Show
|
// Show
|
||||||
advancedOptionsFormShowElement.addEventListener('click', function() {
|
if (advancedOptionsFormShowElement) {
|
||||||
wrapperElement.classList.add('d-none');
|
advancedOptionsFormShowElement.addEventListener('click', function() {
|
||||||
advancedOptionsFormElement.classList.remove('d-none');
|
wrapperElement.classList.add('d-none');
|
||||||
});
|
advancedOptionsFormElement.classList.remove('d-none');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Cancel
|
// Cancel
|
||||||
advancedOptionsFormCancelElement.addEventListener('click', function() {
|
if (advancedOptionsFormCancelElement) {
|
||||||
wrapperElement.classList.remove('d-none');
|
advancedOptionsFormCancelElement.addEventListener('click', function() {
|
||||||
advancedOptionsFormElement.classList.add('d-none');
|
wrapperElement.classList.remove('d-none');
|
||||||
});
|
advancedOptionsFormElement.classList.add('d-none');
|
||||||
|
});
|
||||||
// Search
|
}
|
||||||
advancedOptionsFormSearchElement.addEventListener('click', function() {
|
|
||||||
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Public methods
|
// Public methods
|
||||||
@ -156,8 +159,13 @@ var KTLayoutSearch = function() {
|
|||||||
searchObject.on('kt.search.clear', clear);
|
searchObject.on('kt.search.clear', clear);
|
||||||
|
|
||||||
// Custom handlers
|
// Custom handlers
|
||||||
handlePreferences();
|
if (preferencesElement) {
|
||||||
handleAdvancedOptionsForm();
|
handlePreferences();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (advancedOptionsFormElement) {
|
||||||
|
handleAdvancedOptionsForm();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}();
|
}();
|
||||||
|
@ -7,7 +7,7 @@ var KTAppSidebar = function () {
|
|||||||
var sidebar;
|
var sidebar;
|
||||||
var headerMenu;
|
var headerMenu;
|
||||||
var menuDashboardsCollapse;
|
var menuDashboardsCollapse;
|
||||||
var menuWrapper;
|
var menuScroll;
|
||||||
var toggle;
|
var toggle;
|
||||||
|
|
||||||
// Private functions
|
// Private functions
|
||||||
@ -56,7 +56,7 @@ var KTAppSidebar = function () {
|
|||||||
// Handle dashboards menu items collapse mode
|
// Handle dashboards menu items collapse mode
|
||||||
var handleShowMore = function() {
|
var handleShowMore = function() {
|
||||||
menuDashboardsCollapse.addEventListener('hide.bs.collapse', event => {
|
menuDashboardsCollapse.addEventListener('hide.bs.collapse', event => {
|
||||||
menuWrapper.scrollTo({
|
menuScroll.scrollTo({
|
||||||
top: 0,
|
top: 0,
|
||||||
behavior: 'instant'
|
behavior: 'instant'
|
||||||
});
|
});
|
||||||
@ -64,18 +64,18 @@ var KTAppSidebar = function () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var handleMenuScroll = function() {
|
var handleMenuScroll = function() {
|
||||||
var menuActiveItem = menuWrapper.querySelector(".menu-link.active");
|
var menuActiveItem = menuScroll.querySelector(".menu-link.active");
|
||||||
|
|
||||||
if ( !menuActiveItem ) {
|
if ( !menuActiveItem ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( KTUtil.isVisibleInContainer(menuActiveItem, menuWrapper) === true) {
|
if ( KTUtil.isVisibleInContainer(menuActiveItem, menuScroll) === true) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
menuWrapper.scroll({
|
menuScroll.scroll({
|
||||||
top: KTUtil.getRelativeTopPosition(menuActiveItem, menuWrapper),
|
top: KTUtil.getRelativeTopPosition(menuActiveItem, menuScroll),
|
||||||
behavior: 'smooth'
|
behavior: 'smooth'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -88,7 +88,7 @@ var KTAppSidebar = function () {
|
|||||||
toggle = document.querySelector('#kt_app_sidebar_toggle');
|
toggle = document.querySelector('#kt_app_sidebar_toggle');
|
||||||
headerMenu = document.querySelector('#kt_app_header_menu');
|
headerMenu = document.querySelector('#kt_app_header_menu');
|
||||||
menuDashboardsCollapse = document.querySelector('#kt_app_sidebar_menu_dashboards_collapse');
|
menuDashboardsCollapse = document.querySelector('#kt_app_sidebar_menu_dashboards_collapse');
|
||||||
menuWrapper = document.querySelector('#kt_app_sidebar_menu_wrapper');
|
menuScroll = document.querySelector('#kt_app_sidebar_menu_scroll');
|
||||||
|
|
||||||
if ( sidebar === null ) {
|
if ( sidebar === null ) {
|
||||||
return;
|
return;
|
||||||
@ -98,7 +98,7 @@ var KTAppSidebar = function () {
|
|||||||
handleToggle();
|
handleToggle();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( menuWrapper ) {
|
if ( menuScroll ) {
|
||||||
handleMenuScroll();
|
handleMenuScroll();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -168,7 +168,7 @@ var KTTablesWidget4 = function () {
|
|||||||
|
|
||||||
// Populate elements with data
|
// Populate elements with data
|
||||||
const imageSrc = image.getAttribute('data-kt-src-path');
|
const imageSrc = image.getAttribute('data-kt-src-path');
|
||||||
image.setAttribute('src', imageSrc + d.image + '.gif');
|
image.setAttribute('src', imageSrc + d.image + '.png');
|
||||||
name.innerText = d.name;
|
name.innerText = d.name;
|
||||||
description.innerText = d.description;
|
description.innerText = d.description;
|
||||||
cost.innerText = d.cost;
|
cost.innerText = d.cost;
|
||||||
|
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 110 KiB After Width: | Height: | Size: 62 KiB |
Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 87 KiB After Width: | Height: | Size: 45 KiB |
Before Width: | Height: | Size: 101 KiB After Width: | Height: | Size: 52 KiB |
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 102 KiB After Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 84 KiB After Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 83 KiB After Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 87 KiB After Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 83 KiB After Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 119 KiB After Width: | Height: | Size: 65 KiB |
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 40 KiB |
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 41 KiB |
Before Width: | Height: | Size: 8.5 KiB After Width: | Height: | Size: 6.0 KiB |
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 40 KiB |
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 80 KiB After Width: | Height: | Size: 40 KiB |
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 86 KiB After Width: | Height: | Size: 47 KiB |
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 108 KiB After Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 280 KiB After Width: | Height: | Size: 63 KiB |
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 213 KiB After Width: | Height: | Size: 95 KiB |
Before Width: | Height: | Size: 233 KiB After Width: | Height: | Size: 62 KiB |
Before Width: | Height: | Size: 113 KiB After Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 233 KiB After Width: | Height: | Size: 56 KiB |
Before Width: | Height: | Size: 158 KiB After Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 215 KiB After Width: | Height: | Size: 63 KiB |
Before Width: | Height: | Size: 167 KiB After Width: | Height: | Size: 51 KiB |
Before Width: | Height: | Size: 177 KiB After Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 278 KiB After Width: | Height: | Size: 76 KiB |
Before Width: | Height: | Size: 211 KiB After Width: | Height: | Size: 67 KiB |
Before Width: | Height: | Size: 138 KiB After Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 139 KiB After Width: | Height: | Size: 93 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 8.8 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 8.8 KiB |
Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 83 KiB After Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 83 KiB After Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 77 KiB After Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 77 KiB After Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 84 KiB After Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 84 KiB After Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 186 KiB After Width: | Height: | Size: 66 KiB |
Before Width: | Height: | Size: 183 KiB After Width: | Height: | Size: 64 KiB |
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 98 KiB After Width: | Height: | Size: 40 KiB |
Before Width: | Height: | Size: 98 KiB After Width: | Height: | Size: 40 KiB |
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 18 KiB |