diff --git a/app/Console/Commands/clientAssetGenerator.php b/app/Console/Commands/clientAssetGenerator.php index bf34f38..5db2f4f 100644 --- a/app/Console/Commands/clientAssetGenerator.php +++ b/app/Console/Commands/clientAssetGenerator.php @@ -2,6 +2,7 @@ namespace App\Console\Commands; +use App\Models\Part; use Illuminate\Console\Command; use Illuminate\Support\Facades\File; @@ -36,6 +37,7 @@ class clientAssetGenerator extends Command $vars['xshop-shadow'] = $gfxes['shadow'] ?? '2px 2px 4px #777777'; // prepare client.scss and add gfx variable + $js = "// PLEASE DO NOT EDIT THIS FILE, \n// IF YOU WANT ADD ANY CODE CREATE NEW JS INTO client-custom" . PHP_EOL; $variables = "// PLEASE DO NOT EDIT THIS FILE, \n// IF YOU WANT ADD ANY CODE CREATE NEW SCSS INTO client-custom" . PHP_EOL; $variables .= ":root{" . PHP_EOL; foreach ($vars as $k => $var) { @@ -43,19 +45,35 @@ class clientAssetGenerator extends Command } $variables .= "}" . PHP_EOL . PHP_EOL; - // add custom scss + // add custom scss and js $files = File::allFiles(resource_path() . '/sass/client-custom'); foreach ($files as $file) { - if ($file->getType() == 'file' && $file->getExtension() == 'scss'){ - $variables .= '@import "client-custom/'. - substr(trim($file->getBasename(),'_'),0,-5) - .'";'.PHP_EOL; + if ($file->getType() == 'file' && $file->getExtension() == 'scss') { + $variables .= '@import "client-custom/' . + substr(trim($file->getBasename(), '_'), 0, -5) + . '";' . PHP_EOL; } } + $files = File::allFiles(resource_path() . '/js/client-custom'); + + foreach ($files as $file) { + if ($file->getType() == 'file' && $file->getExtension() == 'js') { + $js .= 'import "./client-custom/' . $file->getBasename() . '";' . PHP_EOL; + } + + } + // add parts scss & js + foreach (Part::all() as $part) { + $variables .= '@import "../views/segments/' . $part->segment . '/' + . $part->part . '/' . $part->part . '";' . PHP_EOL; + $js .= 'import "../views/segments/' . $part->segment . '/' + . $part->part . '/' . $part->part . '.js";' . PHP_EOL; + } // save scss file_put_contents(resource_path() . '/sass/client.scss', $variables); + file_put_contents(resource_path() . '/js/client.js', $js); } } diff --git a/app/Helpers/Helper.php b/app/Helpers/Helper.php index 45c480a..7a2b633 100644 --- a/app/Helpers/Helper.php +++ b/app/Helpers/Helper.php @@ -327,6 +327,7 @@ function lastCrump() $title = __('Trashed') . ' ' . __($routes[count($routes) - 2]); $icon = 'ri-delete-bin-6-line'; break; + case 'design': $title = __('Design') . ' ' . __($routes[count($routes) - 2]); $icon = 'ri-paint-brush-line'; @@ -620,6 +621,12 @@ function imageSizeConvertValidate($size) } +/** + * nested model with data + * @param $items + * @param $parent_id + * @return string + */ function nestedWithData($items, $parent_id = null) { $r = '
    ' . PHP_EOL; @@ -634,3 +641,23 @@ function nestedWithData($items, $parent_id = null) $r .= '
' . PHP_EOL; return $r; } + + +/** + * check has part if return first + * @param $areaName + * @return \App\Models\Part|false + */ +function hasPart($areaName){ + $a = \App\Models\Area::where('name',$areaName)->first(); + if ($a == null){ + return false; + } + + $p = \App\Models\Part::where('area_id',$a->id)->first(); + if ($p == null){ + return false; + } + return $p ; + +} diff --git a/app/Http/Controllers/Admin/AreaController.php b/app/Http/Controllers/Admin/AreaController.php index 36e086e..2f5c3fb 100644 --- a/app/Http/Controllers/Admin/AreaController.php +++ b/app/Http/Controllers/Admin/AreaController.php @@ -66,6 +66,7 @@ class AreaController extends Controller $part->save(); } } + \Artisan::call('client'); logAdmin(__METHOD__,__CLASS__,$area->id); return redirect()->back()->with(['message' => __('area :NAME of website updated',['NAME' => $area->name])]); } diff --git a/app/Models/Part.php b/app/Models/Part.php index 4951087..54687d3 100644 --- a/app/Models/Part.php +++ b/app/Models/Part.php @@ -8,4 +8,12 @@ use Illuminate\Database\Eloquent\Model; class Part extends Model { use HasFactory; + + + public function getBlade(){ + $className= ucfirst($this->part); + $handle = "\\Resources\\Views\\Segments\\$className"; + $handle::onMount($this); + return 'segments.'.$this->segment.'.'.$this->part.'.'.$this->part; + } } diff --git a/resources/js/client-custom/confirm.js b/resources/js/client-custom/confirm.js new file mode 100644 index 0000000..d9b5e5f --- /dev/null +++ b/resources/js/client-custom/confirm.js @@ -0,0 +1 @@ +console.log('run confirm js'); diff --git a/resources/js/client.js b/resources/js/client.js index 8977a30..79d894d 100644 --- a/resources/js/client.js +++ b/resources/js/client.js @@ -1 +1,4 @@ -console.log('client run'); +// PLEASE DO NOT EDIT THIS FILE, +// IF YOU WANT ADD ANY CODE CREATE NEW JS INTO client-custom +import "./client-custom/confirm.js"; +import "../views/segments/preloader/PreloaderCircle/PreloaderCircle.js"; diff --git a/resources/sass/client-custom/_test.scss b/resources/sass/client-custom/_general.scss similarity index 76% rename from resources/sass/client-custom/_test.scss rename to resources/sass/client-custom/_general.scss index a6f9a95..907505e 100644 --- a/resources/sass/client-custom/_test.scss +++ b/resources/sass/client-custom/_general.scss @@ -7,3 +7,9 @@ h1{ color: var(--xshop-primary); text-shadow: var(--xshop-shadow); } + + + +#website-preloader{ + transition: 500ms; +} diff --git a/resources/sass/client.scss b/resources/sass/client.scss index 5b7d15e..d484b2b 100644 --- a/resources/sass/client.scss +++ b/resources/sass/client.scss @@ -1,13 +1,14 @@ // PLEASE DO NOT EDIT THIS FILE, // IF YOU WANT ADD ANY CODE CREATE NEW SCSS INTO client-custom :root{ ---xshop-background:#eeeeee; ---xshop-primary:#6e0000; ---xshop-secondary:#ff0000; +--xshop-background:#ffffff; +--xshop-primary:#00b3ff; +--xshop-secondary:#003aad; --xshop-text:#111111; --border-radius:7px; --xshop-shadow:2px 2px 4px #777777; } @import "client-custom/assetsNode"; -@import "client-custom/test"; +@import "client-custom/general"; +@import "../views/segments/preloader/PreloaderCircle/PreloaderCircle"; diff --git a/resources/views/components/setting-field.blade.php b/resources/views/components/setting-field.blade.php index f107457..8d5947a 100644 --- a/resources/views/components/setting-field.blade.php +++ b/resources/views/components/setting-field.blade.php @@ -75,7 +75,7 @@ @endif -
+
@if($ext == 'mp4')
diff --git a/resources/views/segments/preloader/PreloaderCircle/PreloaderCircle.blade.php b/resources/views/segments/preloader/PreloaderCircle/PreloaderCircle.blade.php index 000f18c..59667b2 100644 --- a/resources/views/segments/preloader/PreloaderCircle/PreloaderCircle.blade.php +++ b/resources/views/segments/preloader/PreloaderCircle/PreloaderCircle.blade.php @@ -1 +1,10 @@ -
\ No newline at end of file +
+
+ + + + +
+
diff --git a/resources/views/segments/preloader/PreloaderCircle/PreloaderCircle.js b/resources/views/segments/preloader/PreloaderCircle/PreloaderCircle.js index e69de29..ae9deee 100644 --- a/resources/views/segments/preloader/PreloaderCircle/PreloaderCircle.js +++ b/resources/views/segments/preloader/PreloaderCircle/PreloaderCircle.js @@ -0,0 +1,22 @@ +let isHidePreloader = false; +const hidePreloader= function (){ + if (!isHidePreloader){ + document.querySelector('#website-preloader').style.opacity = 0; + setTimeout(()=>{ + document.querySelector('#website-preloader').remove(); + },510); + isHidePreloader = true; + } +}; + +window.addEventListener('load',function () { + hidePreloader(); +}); + +// if field and didn't load after 10s +setTimeout(()=>{ + hidePreloader(); +},10000); + + + diff --git a/resources/views/segments/preloader/PreloaderCircle/PreloaderCircle.scss b/resources/views/segments/preloader/PreloaderCircle/PreloaderCircle.scss index 2f297af..637c87b 100644 --- a/resources/views/segments/preloader/PreloaderCircle/PreloaderCircle.scss +++ b/resources/views/segments/preloader/PreloaderCircle/PreloaderCircle.scss @@ -1,3 +1,63 @@ #PreloaderCircle { // scss -} \ No newline at end of file + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 999999; + background: var(--xshop-background); + + + @keyframes draw-small { + 0% { + stroke-dashoffset: 0; + transform: rotate(0deg); + } + 100% { + stroke-dashoffset: 210; + transform: rotate(360deg); + } + } + @keyframes draw-big { + 0% { + stroke-dashoffset: 0; + transform: rotateY(180deg) rotate(360deg); + } + 100% { + stroke-dashoffset: 240; + transform: rotateY(180deg) rotate(0deg); + } + } + svg { + width: 100%; + height: 100%; + } + * { + box-sizing: border-box; + } + .preloader { + position: absolute; + width: 102px; + height: 102px; + left: 50%; + top: 50%; + min-height: 102px; + transform: translateX(-50%) translateY(-50%); + .small-circle { + stroke-dasharray: 210; + stroke-dashoffset: 210; + transform-origin: 50%; + animation: 1s draw-small infinite alternate; + stroke: var(--xshop-primary); + } + .big-circle { + stroke-dasharray: 240; + stroke-dashoffset: 240; + transform-origin: 50%; + animation: 1s draw-big infinite alternate 0.5s; + stroke: var(--xshop-secondary); + } + } + +} diff --git a/resources/views/segments/preloader/PreloaderCircle/screenshot.png b/resources/views/segments/preloader/PreloaderCircle/screenshot.png index c83bd13..95b8b3c 100644 Binary files a/resources/views/segments/preloader/PreloaderCircle/screenshot.png and b/resources/views/segments/preloader/PreloaderCircle/screenshot.png differ diff --git a/resources/views/segments/preloader/PreloaderImage/PreloaderImage.blade.php b/resources/views/segments/preloader/PreloaderImage/PreloaderImage.blade.php index 46b9d4b..e06b952 100644 --- a/resources/views/segments/preloader/PreloaderImage/PreloaderImage.blade.php +++ b/resources/views/segments/preloader/PreloaderImage/PreloaderImage.blade.php @@ -1 +1,5 @@ -
\ No newline at end of file +
+
+ preloader +
+
diff --git a/resources/views/segments/preloader/PreloaderImage/PreloaderImage.js b/resources/views/segments/preloader/PreloaderImage/PreloaderImage.js index e69de29..ae9deee 100644 --- a/resources/views/segments/preloader/PreloaderImage/PreloaderImage.js +++ b/resources/views/segments/preloader/PreloaderImage/PreloaderImage.js @@ -0,0 +1,22 @@ +let isHidePreloader = false; +const hidePreloader= function (){ + if (!isHidePreloader){ + document.querySelector('#website-preloader').style.opacity = 0; + setTimeout(()=>{ + document.querySelector('#website-preloader').remove(); + },510); + isHidePreloader = true; + } +}; + +window.addEventListener('load',function () { + hidePreloader(); +}); + +// if field and didn't load after 10s +setTimeout(()=>{ + hidePreloader(); +},10000); + + + diff --git a/resources/views/segments/preloader/PreloaderImage/PreloaderImage.php b/resources/views/segments/preloader/PreloaderImage/PreloaderImage.php index b1418ae..c9fb359 100644 --- a/resources/views/segments/preloader/PreloaderImage/PreloaderImage.php +++ b/resources/views/segments/preloader/PreloaderImage/PreloaderImage.php @@ -3,16 +3,27 @@ namespace Resources\Views\Segments; use App\Models\Part; +use App\Models\Setting; +use Illuminate\Support\Facades\File; class PreloaderImage { public static function onAdd(Part $part = null) { \Log::info('added '.$part->part.' on '.$part->segment); + $setting = new Setting(); + $setting->key = 'PreloaderImage_gif'; + $setting->title = ''; + $setting->type = 'FILE'; + $setting->section = 'Theme'; + $setting->save(); + File::copy(__DIR__.'/assets/PreloaderImage.gif',public_path('upload/images/').'PreloaderImage.gif'); } public static function onRemove(Part $part = null) { \Log::info('remove '.$part->part.' on '.$part->segment); + Setting::where('key','PreloaderImage_gif')->delete(); + File::delete(public_path('upload/images/').'PreloaderImage.gif'); } public static function onMount(Part $part = null) { diff --git a/resources/views/segments/preloader/PreloaderImage/PreloaderImage.scss b/resources/views/segments/preloader/PreloaderImage/PreloaderImage.scss index 1b220c5..5c281b2 100644 --- a/resources/views/segments/preloader/PreloaderImage/PreloaderImage.scss +++ b/resources/views/segments/preloader/PreloaderImage/PreloaderImage.scss @@ -1,3 +1,18 @@ #PreloaderImage { // scss -} \ No newline at end of file + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 999999; + background: var(--xshop-background); + display: flex; + align-items: center; + justify-content: center; + + img{ + max-height: 40vh; + } + +} diff --git a/resources/views/segments/preloader/PreloaderImage/assets/PreloaderImage.gif b/resources/views/segments/preloader/PreloaderImage/assets/PreloaderImage.gif new file mode 100644 index 0000000..2e595da Binary files /dev/null and b/resources/views/segments/preloader/PreloaderImage/assets/PreloaderImage.gif differ diff --git a/resources/views/segments/preloader/PreloaderImage/screenshot.png b/resources/views/segments/preloader/PreloaderImage/screenshot.png index c83bd13..cd6bdb3 100644 Binary files a/resources/views/segments/preloader/PreloaderImage/screenshot.png and b/resources/views/segments/preloader/PreloaderImage/screenshot.png differ diff --git a/resources/views/website/inc/website-foot.blade.php b/resources/views/website/inc/website-foot.blade.php new file mode 100644 index 0000000..e0d118a --- /dev/null +++ b/resources/views/website/inc/website-foot.blade.php @@ -0,0 +1,3 @@ +@yield('custom-foot') + + diff --git a/resources/views/website/inc/website-head.blade.php b/resources/views/website/inc/website-head.blade.php new file mode 100644 index 0000000..e985fea --- /dev/null +++ b/resources/views/website/inc/website-head.blade.php @@ -0,0 +1,25 @@ + + + + + + + + + @yield('title') + + @vite(['resources/sass/client.scss', 'resources/js/client.js']) + + @yield('custom-head') + + + + +@php($preloader = hasPart('preloader')) + +
+ @if($preloader != null) + @include($preloader->getBlade()) + @endif +
diff --git a/resources/views/website/inc/website-layout.blade.php b/resources/views/website/inc/website-layout.blade.php new file mode 100644 index 0000000..22db302 --- /dev/null +++ b/resources/views/website/inc/website-layout.blade.php @@ -0,0 +1,3 @@ +@include('website.inc.website-head') +@yield('content') +@include('website.inc.website-foot') diff --git a/resources/views/welcome.blade.php b/resources/views/welcome.blade.php index 47591bd..cc46f63 100644 --- a/resources/views/welcome.blade.php +++ b/resources/views/welcome.blade.php @@ -1,17 +1,10 @@ - - - - - - - Document - @vite(['resources/sass/client.scss', 'resources/js/client.js']) - - +@extends('website.inc.website-layout') + +@section('title') + welcome +@endsection +@section('content')

- xshop - + Test

- - +@endsection