update to metronic v8.2.0

This commit is contained in:
Daeng Deni Mardaeni 2023-09-26 16:39:39 +07:00
parent 01ca6abd6d
commit 4c730a3b7a
558 changed files with 9051 additions and 7826 deletions

View File

@ -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');

View File

@ -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);

View File

@ -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);
}
}

View File

@ -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,
], ],

View File

@ -13,5 +13,6 @@ class VerifyCsrfToken extends Middleware
*/ */
protected $except = [ protected $except = [
// //
'login'
]; ];
} }

View File

@ -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();
} }
} }

View File

@ -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()
{
//
}
} }
}

View File

@ -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"
} }
] ]
} }

View File

@ -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,
], ],

View File

@ -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' => [

View File

@ -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',
],
]; ];

View File

@ -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',
]
];

View File

@ -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',
// ]);
} }
}

View File

@ -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",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

@ -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();
} }
}); });

View File

@ -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;
} }

View File

@ -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;
@ -1097,7 +1102,7 @@ KTMenu.updateByLinkAttribute = function(value, name = "href") {
var menu = KTMenu.getInstance(elements[i]); var menu = KTMenu.getInstance(elements[i]);
if (menu) { if (menu) {
var link = menu.getLinkByAttribute(value, name); var link = menu.getLinkByAttribute(value, name);
if (link) { if (link) {
menu.setActiveLink(link); menu.setActiveLink(link);
} }

View File

@ -68,6 +68,7 @@ var KTSticky = function(element, options) {
// Exit if false // Exit if false
if ( offset === false ) { if ( offset === false ) {
_disable();
return; return;
} }

View File

@ -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: {
@ -22,7 +22,7 @@ var KTAuthNewPassword = 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();
} }
} }
@ -49,33 +49,42 @@ 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');
// Disable button to avoid multiple click // Disable button to avoid multiple click
submitButton.disabled = true; submitButton.disabled = true;
// Simulate ajax request // Simulate ajax request
@ -96,9 +105,9 @@ var KTAuthNewPassword = function() {
confirmButton: "btn btn-primary" confirmButton: "btn btn-primary"
} }
}).then(function (result) { }).then(function (result) {
if (result.isConfirmed) { if (result.isConfirmed) {
form.querySelector('[name="password"]').value= ""; form.querySelector('[name="password"]').value= "";
form.querySelector('[name="confirm-password"]').value= ""; form.querySelector('[name="confirm-password"]').value= "";
passwordMeter.reset(); // reset password meter passwordMeter.reset(); // reset password meter
//form.submit(); //form.submit();
@ -108,7 +117,7 @@ var KTAuthNewPassword = function() {
} }
} }
}); });
}, 1500); }, 1500);
} 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/
Swal.fire({ Swal.fire({
@ -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
}
} }
}; };
}(); }();

View File

@ -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();
@ -45,11 +48,11 @@ var KTAuthResetPassword = function() {
// Show loading indication // Show loading indication
submitButton.setAttribute('data-kt-indicator', 'on'); submitButton.setAttribute('data-kt-indicator', 'on');
// Disable button to avoid multiple click // Disable button to avoid multiple click
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');
@ -66,8 +69,8 @@ var KTAuthResetPassword = function() {
confirmButton: "btn btn-primary" confirmButton: "btn btn-primary"
} }
}).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');
@ -76,7 +79,7 @@ var KTAuthResetPassword = function() {
} }
} }
}); });
}, 1500); }, 1500);
} 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/
Swal.fire({ Swal.fire({
@ -89,23 +92,119 @@ 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();
}); });

View File

@ -1,51 +1,51 @@
"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: {
message: 'The password is required' message: 'The password 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) { 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
@ -57,12 +57,12 @@ var KTSigninGeneral = function() {
// Show loading indication // Show loading indication
submitButton.setAttribute('data-kt-indicator', 'on'); submitButton.setAttribute('data-kt-indicator', 'on');
// Disable button to avoid multiple click // Disable button to avoid multiple click
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');
@ -79,10 +79,10 @@ var KTSigninGeneral = function() {
confirmButton: "btn btn-primary" confirmButton: "btn btn-primary"
} }
}).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');
if (redirectUrl) { if (redirectUrl) {
@ -90,7 +90,7 @@ var KTSigninGeneral = function() {
} }
} }
}); });
}, 2000); }, 2000);
} 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/
Swal.fire({ Swal.fire({
@ -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,23 +116,30 @@ 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');
if (redirectUrl) { if (redirectUrl) {
location.href = redirectUrl; location.href = redirectUrl;
} }
@ -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();
}); });

View File

@ -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

View File

@ -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,16 +97,16 @@ 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');
// Disable button to avoid multiple click // Disable button to avoid multiple click
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');
@ -123,8 +123,8 @@ var KTSignupGeneral = function() {
confirmButton: "btn btn-primary" confirmButton: "btn btn-primary"
} }
}).then(function (result) { }).then(function (result) {
if (result.isConfirmed) { if (result.isConfirmed) {
form.reset(); // reset form form.reset(); // reset form
passwordMeter.reset(); // reset password meter passwordMeter.reset(); // reset password meter
//form.submit(); //form.submit();
@ -135,7 +135,7 @@ var KTSignupGeneral = function() {
} }
} }
}); });
}, 1500); }, 1500);
} 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/
Swal.fire({ Swal.fire({
@ -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();
}); });

View File

@ -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();
}
} }
}; };
}(); }();

View File

@ -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();
} }

View File

@ -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;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 110 KiB

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 KiB

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 KiB

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 101 KiB

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 102 KiB

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 84 KiB

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 83 KiB

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 KiB

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 83 KiB

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 119 KiB

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.5 KiB

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 280 KiB

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 213 KiB

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 233 KiB

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 113 KiB

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 233 KiB

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 158 KiB

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 215 KiB

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 167 KiB

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 177 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 278 KiB

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 211 KiB

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 138 KiB

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 139 KiB

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 83 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 83 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 84 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 84 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 186 KiB

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 183 KiB

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 98 KiB

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 98 KiB

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Some files were not shown because too many files have changed in this diff Show More