diff --git a/README.md b/README.md index d92812f..f2987b0 100644 --- a/README.md +++ b/README.md @@ -84,10 +84,15 @@ - events - | event-name | description | - |------------|-----------------------------------| - | modal-show | do something when modal is showen | - | modal-hide | do something when modal is hidden | + | event-name | description | + |--------------------|------------------------------| + | modal-show | when modal is showen | + | modal-hide | when modal is hidden | + | no-files-show | when no files msg is showen | + | no-files-hide | when no files msg is hidden | + | loading-files-show | when loading files is hidden | + | loading-files-hide | when loading files is hidden | + | ajax-error-show | when ajax call fails | ## Config **config/mediaManager.php** @@ -134,6 +139,11 @@ return [ * display file last modification time as */ 'last_modified_format' => 'toDateString', + + /** + * hide file extension in files list + */ + 'hide_ext' => true ]; ``` @@ -149,9 +159,9 @@ return [ - install dependencies ```bash -yarn add vue dropzone keycode vue-tippy vue2-filters vue-lightbox vuemit +yarn add vue dropzone keycode vue-tippy vue2-filters vuemit # or -npm install vue dropzone keycode vue-tippy vue2-filters vue-lightbox vuemit +npm install vue dropzone keycode vue-tippy vue2-filters vuemit ``` - for styling we use ***bulma*** diff --git a/composer.json b/composer.json index 4457b0e..1da3dd8 100644 --- a/composer.json +++ b/composer.json @@ -18,7 +18,6 @@ "require": { "php" : "~7.0", "illuminate/support": "^5.4", - "tightenco/ziggy": "^0.4", "ctf0/package-changelog": "^1.0" }, "autoload": { diff --git a/logs/v1.2.3.txt b/logs/v1.2.3.txt deleted file mode 100644 index f8a72f2..0000000 --- a/logs/v1.2.3.txt +++ /dev/null @@ -1,4 +0,0 @@ -- fixed sortBy:size -- fixed sortBy:last_modified -- add new option to config https://github.com/ctf0/Laravel-Media-Manager/blob/master/src/config/mediaManager.php#L51 -- update view \ No newline at end of file diff --git a/logs/v1.3.0.txt b/logs/v1.3.0.txt new file mode 100644 index 0000000..0610fff --- /dev/null +++ b/logs/v1.3.0.txt @@ -0,0 +1,16 @@ +- remove ziggy +- remove vue-lightbox +- remove bs-modal +- add new option to config +- add events +- add new animation for ajax call fail +- add new key into lang for “ajax_error” +- optimize bm animation +- show folder content size instead of NaN +- auto-scroll to first item when adding new folder +- fix rename issue with folder vs file +- fix file size conversion +- update folder size on file move +- update assets +- update view +- update rdme \ No newline at end of file diff --git a/src/Controllers/MediaController.php b/src/Controllers/MediaController.php index f91448f..f5003e4 100755 --- a/src/Controllers/MediaController.php +++ b/src/Controllers/MediaController.php @@ -3,12 +3,13 @@ namespace ctf0\MediaManager\Controllers; use Exception; -use Carbon\Carbon; use Illuminate\Http\Request; use App\Http\Controllers\Controller; class MediaController extends Controller { + use OpsTrait; + protected $fileSystem; protected $storageDisk; protected $ignoreFiles; @@ -42,6 +43,45 @@ public function index() return view("MediaManager::{$this->fw}.media"); } + /** + * [files description]. + * + * @param Request $request [description] + * + * @return [type] [description] + */ + public function get_files(Request $request) + { + $folder = $request->folder !== '/' + ? $request->folder + : ''; + + return response()->json([ + 'path' => $folder, + 'items' => $this->getData($folder), + ]); + } + + /** + * [get_all_dirs description]. + * + * @param Request $request [description] + * + * @return [type] [description] + */ + public function get_dirs(Request $request) + { + $folderLocation = $request->folder_location; + + if (is_array($folderLocation)) { + $folderLocation = rtrim(implode('/', $folderLocation), '/'); + } + + return response()->json( + str_replace($folderLocation, '', $this->storageDisk->allDirectories($folderLocation)) + ); + } + /** * [upload description]. * @@ -95,27 +135,6 @@ public function upload(Request $request) return response()->json(['data'=>$result]); } - /** - * [files description]. - * - * @param Request $request [description] - * - * @return [type] [description] - */ - public function files(Request $request) - { - $folder = $request->folder; - - if ($folder == '/') { - $folder = ''; - } - - return response()->json([ - 'path' => $folder, - 'items' => $this->getFiles($folder), - ]); - } - /** * [new_folder description]. * @@ -139,17 +158,17 @@ public function new_folder(Request $request) $message = trans('MediaManager::messages.error_creating_dir'); } - return compact('success', 'message', 'new_folder'); + return compact('success', 'message', 'new_folder_name', 'full_path'); } /** - * [delete_file_folder description]. + * [delete_file description]. * * @param Request $request [description] * * @return [type] [description] */ - public function delete_file_folder(Request $request) + public function delete_file(Request $request) { $folderLocation = $request->folder_location; $result = []; @@ -188,26 +207,6 @@ public function delete_file_folder(Request $request) return response()->json(['data'=>$result]); } - /** - * [get_all_dirs description]. - * - * @param Request $request [description] - * - * @return [type] [description] - */ - public function get_all_dirs(Request $request) - { - $folderLocation = $request->folder_location; - - if (is_array($folderLocation)) { - $folderLocation = rtrim(implode('/', $folderLocation), '/'); - } - - return response()->json( - str_replace($folderLocation, '', $this->storageDisk->allDirectories($folderLocation)) - ); - } - /** * [move_file description]. * @@ -225,13 +224,15 @@ public function move_file(Request $request) } foreach ($request->moved_files as $one) { - $file_type =$one['type']; + $file_type = $one['type']; $file_name = $one['name']; + $file_size = $one['size']; + $destination = "{$request->destination}/$file_name"; $file_name = "$folderLocation/$file_name"; $destination = strpos($destination, '../') == true - ? '/' . dirname($folderLocation) . '/' . str_replace('../', '', $destination) - : "$folderLocation/$destination"; + ? '/' . dirname($folderLocation) . '/' . str_replace('../', '', $destination) + : "$folderLocation/$destination"; try { if (!file_exists($destination)) { @@ -240,6 +241,7 @@ public function move_file(Request $request) 'success' => true, 'name' => $one['name'], 'type' => $file_type, + 'size' => $file_size, ]; } else { throw new Exception(trans('MediaManager::messages.error_moving')); @@ -289,80 +291,4 @@ public function rename_file(Request $request) return compact('success', 'message', 'new_filename'); } - - /** - * [getFiles description]. - * - * @param [type] $dir [description] - * - * @return [type] [description] - */ - public function getFiles($dir) - { - $files = []; - $storageFiles = $this->storageDisk->files($dir); - $storageFolders = $this->storageDisk->directories($dir); - - $pattern = $this->ignoreFiles; - - foreach ($storageFolders as $folder) { - if (!preg_grep($pattern, [$folder])) { - $time = $this->storageDisk->lastModified($folder); - $files[] = [ - 'name' => strpos($folder, '/') > 1 ? str_replace('/', '', strrchr($folder, '/')) : $folder, - 'type' => 'folder', - 'path' => $this->storageDisk->url($folder), - 'size' => '', - 'items' => count($this->storageDisk->allFiles($folder)) + count($this->storageDisk->allDirectories($folder)), - 'last_modified' => $time, - 'last_modified_formated' => Carbon::createFromTimestamp($time)->{$this->LMF}(), - ]; - } - } - - foreach ($storageFiles as $file) { - if (!preg_grep($pattern, [$file])) { - $time = $this->storageDisk->lastModified($file); - $files[] = [ - 'name' => strpos($file, '/') > 1 ? str_replace('/', '', strrchr($file, '/')) : $file, - 'type' => $this->storageDisk->mimeType($file), - 'path' => $this->storageDisk->url($file), - 'size' => $this->storageDisk->size($file), - 'last_modified' => $time, - 'last_modified_formated' => Carbon::createFromTimestamp($time)->{$this->LMF}(), - ]; - } - } - - return $files; - } - - /** - * sanitize input. - * - * @param [type] $text [description] - * @param null|mixed $folder - * - * @return [type] [description] - */ - protected function cleanName($text, $folder = null) - { - $pattern = [ - '/(script.*?\/script)|[^(' . $this->fileChars . ')a-zA-Z0-9]+/ius', - ]; - - if ($folder) { - $pattern = [ - '/(script.*?\/script)|[^(' . $this->folderChars . ')a-zA-Z0-9]+/ius', - ]; - } - - $text = preg_replace($pattern, '', $text); - - if ($text == '') { - $text = $this->sanitizedText; - } - - return $text; - } } diff --git a/src/Controllers/OpsTrait.php b/src/Controllers/OpsTrait.php new file mode 100644 index 0000000..768d81a --- /dev/null +++ b/src/Controllers/OpsTrait.php @@ -0,0 +1,110 @@ +storageDisk->files($dir); + $storageFolders = $this->storageDisk->directories($dir); + + $pattern = $this->ignoreFiles; + + foreach ($storageFolders as $folder) { + if (!preg_grep($pattern, [$folder])) { + $time = $this->storageDisk->lastModified($folder); + $files[] = [ + 'name' => strpos($folder, '/') > 1 ? str_replace('/', '', strrchr($folder, '/')) : $folder, + 'type' => 'folder', + 'path' => $this->storageDisk->url($folder), + 'size' => $this->folderSize($folder), + 'items' => $this->folderCount($folder), + 'last_modified' => $time, + 'last_modified_formated' => Carbon::createFromTimestamp($time)->{$this->LMF}(), + ]; + } + } + + foreach ($storageFiles as $file) { + if (!preg_grep($pattern, [$file])) { + $time = $this->storageDisk->lastModified($file); + $files[] = [ + 'name' => strpos($file, '/') > 1 ? str_replace('/', '', strrchr($file, '/')) : $file, + 'type' => $this->storageDisk->mimeType($file), + 'path' => $this->storageDisk->url($file), + 'size' => $this->storageDisk->size($file), + 'last_modified' => $time, + 'last_modified_formated' => Carbon::createFromTimestamp($time)->{$this->LMF}(), + ]; + } + } + + return $files; + } + + /** + * sanitize input. + * + * @param [type] $text [description] + * @param null|mixed $folder + * + * @return [type] [description] + */ + protected function cleanName($text, $folder = null) + { + $pattern = $this->filePattern($this->fileChars); + + if ($folder) { + $pattern = $this->filePattern($this->folderChars); + } + + $text = preg_replace($pattern, '', $text); + + return $text == '' ? $this->sanitizedText : $text; + } + + protected function filePattern($file) + { + return '/(script.*?\/script)|[^(' . $file . ')a-zA-Z0-9]+/ius'; + } + + /** + * helpers for folder ops. + * + * @param [type] $folder [description] + * + * @return [type] [description] + */ + protected function folderCount($folder) + { + // return count($this->folderFiles($folder)) + count($this->storageDisk->allDirectories($folder)); + return count($this->folderFiles($folder)); + } + + protected function folderSize($folder) + { + $file_size = 0; + + foreach ($this->folderFiles($folder) as $file) { + $file_size += $this->storageDisk->size($file); + } + + return $file_size; + } + + protected function folderFiles($folder) + { + return $this->storageDisk->allFiles($folder); + } +} diff --git a/src/MediaManagerServiceProvider.php b/src/MediaManagerServiceProvider.php index a6ac115..c0fed41 100644 --- a/src/MediaManagerServiceProvider.php +++ b/src/MediaManagerServiceProvider.php @@ -25,9 +25,6 @@ public function boot() protected function packagePublish() { // config - $this->mergeConfigFrom( - __DIR__ . '/config/ziggy.php', 'ziggy' - ); $this->publishes([ __DIR__ . '/config' => config_path(), ], 'config'); @@ -118,7 +115,6 @@ protected function checkExist($file, $search) */ public function register() { - $this->app->register(\Tightenco\Ziggy\ZiggyServiceProvider::class); $this->app->register(\ctf0\PackageChangeLog\PackageChangeLogServiceProvider::class); } } diff --git a/src/MediaRoutes.php b/src/MediaRoutes.php index c701df0..e26842a 100644 --- a/src/MediaRoutes.php +++ b/src/MediaRoutes.php @@ -14,10 +14,10 @@ public static function routes() ], function () { Route::get('/', ['uses' => '\ctf0\MediaManager\Controllers\MediaController@index', 'as' => 'index']); Route::post('upload', ['uses' => '\ctf0\MediaManager\Controllers\MediaController@upload', 'as' => 'upload']); - Route::post('files', ['uses' => '\ctf0\MediaManager\Controllers\MediaController@files', 'as' => 'files']); - Route::post('directories', ['uses' => '\ctf0\MediaManager\Controllers\MediaController@get_all_dirs', 'as' => 'directories']); + Route::post('files', ['uses' => '\ctf0\MediaManager\Controllers\MediaController@get_files', 'as' => 'files']); + Route::post('directories', ['uses' => '\ctf0\MediaManager\Controllers\MediaController@get_dirs', 'as' => 'directories']); Route::post('new_folder', ['uses' => '\ctf0\MediaManager\Controllers\MediaController@new_folder', 'as' => 'new_folder']); - Route::post('delete_file_folder', ['uses' => '\ctf0\MediaManager\Controllers\MediaController@delete_file_folder', 'as' => 'delete_file_folder']); + Route::post('delete_file', ['uses' => '\ctf0\MediaManager\Controllers\MediaController@delete_file', 'as' => 'delete_file']); Route::post('move_file', ['uses' => '\ctf0\MediaManager\Controllers\MediaController@move_file', 'as' => 'move_file']); Route::post('rename_file', ['uses' => '\ctf0\MediaManager\Controllers\MediaController@rename_file', 'as' => 'rename_file']); }); diff --git a/src/config/mediaManager.php b/src/config/mediaManager.php index fe239bc..078c2f2 100644 --- a/src/config/mediaManager.php +++ b/src/config/mediaManager.php @@ -49,4 +49,9 @@ * check "/vendor/nesbot/carbon/src/Carbon/Carbon.php" */ 'last_modified_format' => 'toDateString', + + /* + * hide file extension in files list + */ + 'hide_ext' => true, ]; diff --git a/src/config/ziggy.php b/src/config/ziggy.php deleted file mode 100644 index a2c8641..0000000 --- a/src/config/ziggy.php +++ /dev/null @@ -1,5 +0,0 @@ - ['media.*'], -]; diff --git a/src/dist/BM/avalanche.json b/src/dist/BM/avalanche.json new file mode 100755 index 0000000..0d2cbdc --- /dev/null +++ b/src/dist/BM/avalanche.json @@ -0,0 +1 @@ +{"v":"4.10.1","fr":10,"ip":0,"op":36,"w":1080,"h":1080,"nm":"Icon9","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[540,540,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[99.333,99.333,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[598,598],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.474510013356,0.450980003207,0.972549019608,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":15,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-11,9],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[97.247,97.247],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":36,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":0,"nm":"Pre-comp 2","refId":"comp_1","sr":1.2,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[773,816,0],"ix":2},"a":{"a":0,"k":[695.5,607.5,0],"ix":1},"s":{"a":0,"k":[91.435,91.435,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[-172.987,-13.806],[-13.654,172.982],[172.987,13.806],[13.654,-172.983]],"o":[[172.987,13.806],[13.654,-172.982],[-172.987,-13.806],[-13.654,172.983]],"v":[[405.547,630.305],[743.491,342.091],[446.659,1.798],[117.048,292.093]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 2"}],"w":1391,"h":1215,"ip":0,"op":35.8,"st":-11,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[543,545.5,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[259.032,260.075,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[60.339,0],[0,-60.415],[-60.339,0],[0,60.415]],"o":[[-60.339,0],[0,60.415],[60.339,0],[0,-60.415]],"v":[[-5.405,-108.238],[-114.658,1.154],[-5.405,110.545],[103.848,1.154]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0]],"o":[[0,0]],"v":[[466.737,293.185]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.474509803922,0.450980392157,0.972549019608,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 3","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"n":"0p833_1_0p167_0","t":0,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-62.653,-76.561],[-83.722,-48.213],[-90.25,-39.5],[-102,-22.5],[-77,3.5],[-67,-15],[-51.42,2.312],[-35.5,20],[-17,-9.5],[8.5,14.845],[14.974,-10.47],[-16.686,-53.295],[-22.639,-58.262],[-30.395,-63.169]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-62.653,-76.561],[-83.722,-48.213],[-90.25,-39.5],[-102,-22.5],[-77,3.5],[-67,-15],[-51.42,2.312],[-35.5,20],[-17,-9.5],[8.5,14.845],[14.974,-10.47],[-16.686,-53.295],[-22.639,-58.262],[-30.395,-63.169]],"c":true}]},{"i":{"x":0.609,"y":0.609},"o":{"x":0.167,"y":0},"n":"0p609_0p609_0p167_0","t":5,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-62.653,-76.561],[-83.722,-48.213],[-90.25,-39.5],[-102,-22.5],[-77,3.5],[-67,-15],[-51.42,2.312],[-35.5,20],[-17,-9.5],[8.5,14.845],[14.974,-10.47],[-16.686,-53.295],[-22.639,-58.262],[-30.395,-63.169]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-62.179,-76.091],[-84.043,-48.166],[-91.125,-38.375],[-102,-22.5],[-77,3.5],[-67,-15],[-51.543,3.424],[-35.75,22.25],[-16.588,2.933],[11.968,14.693],[17.968,-6.307],[-15.496,-51.079],[-21.626,-57.036],[-28.182,-63.405]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.358,"y":0.358},"n":"0p833_0p833_0p358_0p358","t":8,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-62.179,-76.091],[-84.043,-48.166],[-91.125,-38.375],[-102,-22.5],[-77,3.5],[-67,-15],[-51.543,3.424],[-35.75,22.25],[-16.588,2.933],[11.968,14.693],[17.968,-6.307],[-15.496,-51.079],[-21.626,-57.036],[-28.182,-63.405]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-61.23,-72.333],[-82.368,-49.355],[-91.576,-37.457],[-102,-22.5],[-77.156,3.604],[-66.767,-14.966],[-48.832,6.04],[-33.919,23.364],[-11.91,7.928],[20.706,32.709],[50.667,35.671],[-3.966,-35.116],[-12.129,-44.817],[-20.858,-55.191]],"c":true}]},{"i":{"x":0.704,"y":0.704},"o":{"x":0.167,"y":0.167},"n":"0p704_0p704_0p167_0p167","t":9,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-61.23,-72.333],[-82.368,-49.355],[-91.576,-37.457],[-102,-22.5],[-77.156,3.604],[-66.767,-14.966],[-48.832,6.04],[-33.919,23.364],[-11.91,7.928],[20.706,32.709],[50.667,35.671],[-3.966,-35.116],[-12.129,-44.817],[-20.858,-55.191]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-65.499,-69.515],[-80.693,-51.013],[-91.078,-37.948],[-102,-22.5],[-77.311,3.708],[-66.535,-14.932],[-46.122,8.656],[-24.498,31.992],[2.255,35.468],[29.444,50.725],[63.444,53.225],[7.563,-19.153],[-2.632,-32.599],[-13.534,-46.977]],"c":true}]},{"i":{"x":0.722,"y":0.722},"o":{"x":0.417,"y":0.417},"n":"0p722_0p722_0p417_0p417","t":10,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-65.499,-69.515],[-80.693,-51.013],[-91.078,-37.948],[-102,-22.5],[-77.311,3.708],[-66.535,-14.932],[-46.122,8.656],[-24.498,31.992],[2.255,35.468],[29.444,50.725],[63.444,53.225],[7.563,-19.153],[-2.632,-32.599],[-13.534,-46.977]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-67.871,-67.636],[-79.555,-53.306],[-90.996,-38.494],[-102,-22.5],[-77.608,4.074],[-67.034,-13.247],[-20.338,35.853],[7.295,53.657],[50.649,89.749],[78.031,85.043],[84.031,64.043],[58.873,39.598],[36.307,11.696],[10.754,-23.306]],"c":true}]},{"i":{"x":0.668,"y":0.668},"o":{"x":0.302,"y":0.302},"n":"0p668_0p668_0p302_0p302","t":11,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-67.871,-67.636],[-79.555,-53.306],[-90.996,-38.494],[-102,-22.5],[-77.608,4.074],[-67.034,-13.247],[-20.338,35.853],[7.295,53.657],[50.649,89.749],[78.031,85.043],[84.031,64.043],[58.873,39.598],[36.307,11.696],[10.754,-23.306]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-58.333,-65.803],[-79.171,-36.486],[-88.978,-40.973],[-102,-22.5],[-78,4.75],[-67.5,-13],[-50.87,5.686],[14.03,112.143],[50.948,159.174],[123.405,133.361],[129.405,112.361],[133.952,-4.64],[76.225,22.335],[54.123,18.447]],"c":true}]},{"i":{"x":0.668,"y":0.668},"o":{"x":0.43,"y":0.43},"n":"0p668_0p668_0p43_0p43","t":17,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-58.333,-65.803],[-79.171,-36.486],[-88.978,-40.973],[-102,-22.5],[-78,4.75],[-67.5,-13],[-50.87,5.686],[14.03,112.143],[50.948,159.174],[123.405,133.361],[129.405,112.361],[133.952,-4.64],[76.225,22.335],[54.123,18.447]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-58.333,-65.803],[-79.171,-36.486],[-88.978,-40.973],[-102,-22.5],[-78,4.75],[-67.5,-13],[-50.87,5.686],[14.03,112.143],[50.948,159.174],[123.405,133.361],[129.405,112.361],[133.952,-4.64],[76.225,22.335],[51.035,26.137]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.43,"y":0.43},"n":"0p833_1_0p43_0p43","t":25,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-58.333,-65.803],[-79.171,-36.486],[-88.978,-40.973],[-102,-22.5],[-78,4.75],[-67.5,-13],[-50.87,5.686],[14.03,112.143],[50.948,159.174],[123.405,133.361],[129.405,112.361],[133.952,-4.64],[76.225,22.335],[51.035,26.137]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-62.653,-76.561],[-83.722,-48.213],[-90.25,-39.5],[-102,-22.5],[-77,3.5],[-67,-15],[-51.42,2.312],[-35.5,20],[-17,-9.5],[8.5,14.845],[14.974,-10.47],[-16.686,-53.295],[-22.639,-58.262],[-30.395,-63.169]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"n":"0p833_1_0p167_0","t":26,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-62.653,-76.561],[-83.722,-48.213],[-90.25,-39.5],[-102,-22.5],[-77,3.5],[-67,-15],[-51.42,2.312],[-35.5,20],[-17,-9.5],[8.5,14.845],[14.974,-10.47],[-16.686,-53.295],[-22.639,-58.262],[-30.395,-63.169]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-62.653,-76.561],[-83.722,-48.213],[-90.25,-39.5],[-102,-22.5],[-77,3.5],[-67,-15],[-51.42,2.312],[-35.5,20],[-17,-9.5],[8.5,14.845],[14.974,-10.47],[-16.686,-53.295],[-22.639,-58.262],[-30.395,-63.169]],"c":true}]},{"t":34}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.474509803922,0.450980392157,0.972549019608,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":36,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Layer 2/Icon8 Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[491.93,666.009,0],"ix":2},"a":{"a":0,"k":[98.5,70,0],"ix":1},"s":{"a":0,"k":[259.988,246.757,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0]],"o":[[0,0]],"v":[[-289.183,-138.306]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.862999949736,0.862999949736,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-9.15,-9.42],[32.36,0],[0,62.82],[-0.05,1.27],[-5.08,6.88],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-20.71,21.69],[-62.82,0],[0,-1.29],[5.58,-7.1],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[23.89,36.05]],"v":[[91.861,33.464],[15.735,69.485],[-98.015,-44.265],[-97.945,-48.105],[-81.705,-69.485],[-57.185,-43.245],[-46.515,-60.345],[-15.015,-26.345],[2.985,-56.345],[27.908,-33.603],[35.283,-51.39]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.862999949736,0.862999949736,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.266,69.735],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.02,-0.03]],"o":[[-0.02,0.03],[0,0]],"v":[[0.035,-0.045],[-0.035,0.045]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.709999952129,0.709999952129,0.709999952129,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0.285,21.675],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":45,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":0,"nm":"Pre-comp 1","refId":"comp_3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[532,548,0],"ix":2},"a":{"a":0,"k":[500,500,0],"ix":1},"s":{"a":0,"k":[62.023,62.023,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"s","pt":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[267.86,136.342],[81.777,400.715],[641.882,451.631],[623.32,255.092]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"},{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[452.778,502.778],[325,502.778],[325,613.889],[452.778,613.889]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 2"}],"w":1000,"h":1000,"ip":0,"op":36,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Shape Layer 3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[554,540,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[265.217,265.217,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[215.672,215.672],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-10.557,3.77],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[102.062,102.062],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":36,"st":0,"bm":0}]},{"id":"comp_1","layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Icon8-snow.ai Comp 1","cl":"ai","refId":"comp_2","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":3,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":27,"s":[100],"e":[0]},{"t":30}],"ix":11},"r":{"a":0,"k":-38.334,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":0.322},"o":{"x":0.333,"y":0},"n":"0p667_0p322_0p333_0","t":20,"s":[727.5,781.5,0],"e":[736.866,745.016,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0.491},"n":"0p667_1_0p333_0p491","t":26,"s":[736.866,745.016,0],"e":[783.5,642.5,0],"to":[0,0,0],"ti":[0,0,0]},{"t":39}],"ix":2},"a":{"a":0,"k":[500,500,0],"ix":1},"s":{"a":0,"k":[206,206,100],"ix":6}},"ao":0,"w":1000,"h":1000,"ip":3,"op":39,"st":3,"bm":0},{"ddd":0,"ind":2,"ty":0,"nm":"Icon8-snow.ai Comp 1","cl":"ai","refId":"comp_2","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":29,"s":[100],"e":[0]},{"t":32}],"ix":11},"r":{"a":0,"k":-45.452,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":0.722},"o":{"x":0.333,"y":0},"n":"0p667_0p722_0p333_0","t":18,"s":[715.5,784.5,0],"e":[690.866,696.016,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0.672},"n":"0p667_1_0p333_0p672","t":24,"s":[690.866,696.016,0],"e":[638.5,632.5,0],"to":[0,0,0],"ti":[0,0,0]},{"t":37}],"ix":2},"a":{"a":0,"k":[500,500,0],"ix":1},"s":{"a":0,"k":[230,230,100],"ix":6}},"ao":0,"ef":[{"ty":5,"nm":"Inner/Outer Key","np":116,"mn":"ADBE ATG Extract","ix":1,"en":1,"ef":[{"ty":10,"nm":"Foreground (Inside)","mn":"ADBE ATG Extract-0001","ix":1,"v":{"a":0,"k":0,"ix":1}},{"ty":6,"nm":"Additional Foreground","mn":"ADBE ATG Extract-0002","ix":2,"v":0},{"ty":10,"nm":"Foreground 2","mn":"ADBE ATG Extract-0003","ix":3,"v":{"a":0,"k":0,"ix":3}},{"ty":10,"nm":"Foreground 3","mn":"ADBE ATG Extract-0004","ix":4,"v":{"a":0,"k":0,"ix":4}},{"ty":10,"nm":"Foreground 4","mn":"ADBE ATG Extract-0005","ix":5,"v":{"a":0,"k":0,"ix":5}},{"ty":10,"nm":"Foreground 5","mn":"ADBE ATG Extract-0006","ix":6,"v":{"a":0,"k":0,"ix":6}},{"ty":10,"nm":"Foreground 6","mn":"ADBE ATG Extract-0007","ix":7,"v":{"a":0,"k":0,"ix":7}},{"ty":10,"nm":"Foreground 7","mn":"ADBE ATG Extract-0008","ix":8,"v":{"a":0,"k":0,"ix":8}},{"ty":10,"nm":"Foreground 8","mn":"ADBE ATG Extract-0009","ix":9,"v":{"a":0,"k":0,"ix":9}},{"ty":10,"nm":"Foreground 9","mn":"ADBE ATG Extract-0010","ix":10,"v":{"a":0,"k":0,"ix":10}},{"ty":10,"nm":"Foreground 10","mn":"ADBE ATG Extract-0011","ix":11,"v":{"a":0,"k":0,"ix":11}},{"ty":6,"nm":"","mn":"ADBE ATG Extract-0012","ix":12,"v":0},{"ty":10,"nm":"Background (Outside)","mn":"ADBE ATG Extract-0013","ix":13,"v":{"a":0,"k":0,"ix":13}},{"ty":6,"nm":"Additional Background","mn":"ADBE ATG Extract-0014","ix":14,"v":0},{"ty":10,"nm":"Background 2","mn":"ADBE ATG Extract-0015","ix":15,"v":{"a":0,"k":0,"ix":15}},{"ty":10,"nm":"Background 3","mn":"ADBE ATG Extract-0016","ix":16,"v":{"a":0,"k":0,"ix":16}},{"ty":10,"nm":"Background 4","mn":"ADBE ATG Extract-0017","ix":17,"v":{"a":0,"k":0,"ix":17}},{"ty":10,"nm":"Background 5","mn":"ADBE ATG Extract-0018","ix":18,"v":{"a":0,"k":0,"ix":18}},{"ty":10,"nm":"Background 6","mn":"ADBE ATG Extract-0019","ix":19,"v":{"a":0,"k":0,"ix":19}},{"ty":10,"nm":"Background 7","mn":"ADBE ATG Extract-0020","ix":20,"v":{"a":0,"k":0,"ix":20}},{"ty":10,"nm":"Background 8","mn":"ADBE ATG Extract-0021","ix":21,"v":{"a":0,"k":0,"ix":21}},{"ty":10,"nm":"Background 9","mn":"ADBE ATG Extract-0022","ix":22,"v":{"a":0,"k":0,"ix":22}},{"ty":10,"nm":"Background 10","mn":"ADBE ATG Extract-0023","ix":23,"v":{"a":0,"k":0,"ix":23}},{"ty":6,"nm":"","mn":"ADBE ATG Extract-0024","ix":24,"v":0},{"ty":0,"nm":"Single Mask Highlight Radius","mn":"ADBE ATG Extract-0025","ix":25,"v":{"a":0,"k":5,"ix":25}},{"ty":6,"nm":"Cleanup Foreground","mn":"ADBE ATG Extract-0026","ix":26,"v":0},{"ty":6,"nm":"Cleanup 1","mn":"ADBE ATG Extract-0027","ix":27,"v":0},{"ty":10,"nm":"Path","mn":"ADBE ATG Extract-0028","ix":28,"v":{"a":0,"k":0,"ix":28}},{"ty":0,"nm":"Brush Radius","mn":"ADBE ATG Extract-0029","ix":29,"v":{"a":0,"k":5,"ix":29}},{"ty":0,"nm":"Brush Pressure","mn":"ADBE ATG Extract-0030","ix":30,"v":{"a":0,"k":0.5,"ix":30}},{"ty":6,"nm":"","mn":"ADBE ATG Extract-0031","ix":31,"v":0},{"ty":6,"nm":"Cleanup 2","mn":"ADBE ATG Extract-0032","ix":32,"v":0},{"ty":10,"nm":"Path","mn":"ADBE ATG Extract-0033","ix":33,"v":{"a":0,"k":0,"ix":33}},{"ty":0,"nm":"Brush Radius","mn":"ADBE ATG Extract-0034","ix":34,"v":{"a":0,"k":5,"ix":34}},{"ty":0,"nm":"Brush Pressure","mn":"ADBE ATG Extract-0035","ix":35,"v":{"a":0,"k":0.5,"ix":35}},{"ty":6,"nm":"","mn":"ADBE ATG Extract-0036","ix":36,"v":0},{"ty":6,"nm":"Cleanup 3","mn":"ADBE ATG Extract-0037","ix":37,"v":0},{"ty":10,"nm":"Path","mn":"ADBE ATG Extract-0038","ix":38,"v":{"a":0,"k":0,"ix":38}},{"ty":0,"nm":"Brush Radius","mn":"ADBE ATG Extract-0039","ix":39,"v":{"a":0,"k":5,"ix":39}},{"ty":0,"nm":"Brush Pressure","mn":"ADBE ATG Extract-0040","ix":40,"v":{"a":0,"k":0.5,"ix":40}},{"ty":6,"nm":"","mn":"ADBE ATG Extract-0041","ix":41,"v":0},{"ty":6,"nm":"Cleanup 4","mn":"ADBE ATG Extract-0042","ix":42,"v":0},{"ty":10,"nm":"Path","mn":"ADBE ATG Extract-0043","ix":43,"v":{"a":0,"k":0,"ix":43}},{"ty":0,"nm":"Brush Radius","mn":"ADBE ATG Extract-0044","ix":44,"v":{"a":0,"k":5,"ix":44}},{"ty":0,"nm":"Brush Pressure","mn":"ADBE ATG Extract-0045","ix":45,"v":{"a":0,"k":0.5,"ix":45}},{"ty":6,"nm":"","mn":"ADBE ATG Extract-0046","ix":46,"v":0},{"ty":6,"nm":"Cleanup 5","mn":"ADBE ATG Extract-0047","ix":47,"v":0},{"ty":10,"nm":"Path","mn":"ADBE ATG Extract-0048","ix":48,"v":{"a":0,"k":0,"ix":48}},{"ty":0,"nm":"Brush Radius","mn":"ADBE ATG Extract-0049","ix":49,"v":{"a":0,"k":5,"ix":49}},{"ty":0,"nm":"Brush Pressure","mn":"ADBE ATG Extract-0050","ix":50,"v":{"a":0,"k":0.5,"ix":50}},{"ty":6,"nm":"","mn":"ADBE ATG Extract-0051","ix":51,"v":0},{"ty":6,"nm":"Cleanup 6","mn":"ADBE ATG Extract-0052","ix":52,"v":0},{"ty":10,"nm":"Path","mn":"ADBE ATG Extract-0053","ix":53,"v":{"a":0,"k":0,"ix":53}},{"ty":0,"nm":"Brush Radius","mn":"ADBE ATG Extract-0054","ix":54,"v":{"a":0,"k":5,"ix":54}},{"ty":0,"nm":"Brush Pressure","mn":"ADBE ATG Extract-0055","ix":55,"v":{"a":0,"k":0.5,"ix":55}},{"ty":6,"nm":"","mn":"ADBE ATG Extract-0056","ix":56,"v":0},{"ty":6,"nm":"Cleanup 7","mn":"ADBE ATG Extract-0057","ix":57,"v":0},{"ty":10,"nm":"Path","mn":"ADBE ATG Extract-0058","ix":58,"v":{"a":0,"k":0,"ix":58}},{"ty":0,"nm":"Brush Radius","mn":"ADBE ATG Extract-0059","ix":59,"v":{"a":0,"k":5,"ix":59}},{"ty":0,"nm":"Brush Pressure","mn":"ADBE ATG Extract-0060","ix":60,"v":{"a":0,"k":0.5,"ix":60}},{"ty":6,"nm":"","mn":"ADBE ATG Extract-0061","ix":61,"v":0},{"ty":6,"nm":"Cleanup 8","mn":"ADBE ATG Extract-0062","ix":62,"v":0},{"ty":10,"nm":"Path","mn":"ADBE ATG Extract-0063","ix":63,"v":{"a":0,"k":0,"ix":63}},{"ty":0,"nm":"Brush Radius","mn":"ADBE ATG Extract-0064","ix":64,"v":{"a":0,"k":5,"ix":64}},{"ty":0,"nm":"Brush Pressure","mn":"ADBE ATG Extract-0065","ix":65,"v":{"a":0,"k":0.5,"ix":65}},{"ty":6,"nm":"","mn":"ADBE ATG Extract-0066","ix":66,"v":0},{"ty":6,"nm":"","mn":"ADBE ATG Extract-0067","ix":67,"v":0},{"ty":6,"nm":"Cleanup Background","mn":"ADBE ATG Extract-0068","ix":68,"v":0},{"ty":6,"nm":"Cleanup 1","mn":"ADBE ATG Extract-0069","ix":69,"v":0},{"ty":10,"nm":"Path","mn":"ADBE ATG Extract-0070","ix":70,"v":{"a":0,"k":0,"ix":70}},{"ty":0,"nm":"Brush Radius","mn":"ADBE ATG Extract-0071","ix":71,"v":{"a":0,"k":5,"ix":71}},{"ty":0,"nm":"Brush Pressure","mn":"ADBE ATG Extract-0072","ix":72,"v":{"a":0,"k":0.5,"ix":72}},{"ty":6,"nm":"","mn":"ADBE ATG Extract-0073","ix":73,"v":0},{"ty":6,"nm":"Cleanup 2","mn":"ADBE ATG Extract-0074","ix":74,"v":0},{"ty":10,"nm":"Path","mn":"ADBE ATG Extract-0075","ix":75,"v":{"a":0,"k":0,"ix":75}},{"ty":0,"nm":"Brush Radius","mn":"ADBE ATG Extract-0076","ix":76,"v":{"a":0,"k":5,"ix":76}},{"ty":0,"nm":"Brush Pressure","mn":"ADBE ATG Extract-0077","ix":77,"v":{"a":0,"k":0.5,"ix":77}},{"ty":6,"nm":"","mn":"ADBE ATG Extract-0078","ix":78,"v":0},{"ty":6,"nm":"Cleanup 3","mn":"ADBE ATG Extract-0079","ix":79,"v":0},{"ty":10,"nm":"Path","mn":"ADBE ATG Extract-0080","ix":80,"v":{"a":0,"k":0,"ix":80}},{"ty":0,"nm":"Brush Radius","mn":"ADBE ATG Extract-0081","ix":81,"v":{"a":0,"k":5,"ix":81}},{"ty":0,"nm":"Brush Pressure","mn":"ADBE ATG Extract-0082","ix":82,"v":{"a":0,"k":0.5,"ix":82}},{"ty":6,"nm":"","mn":"ADBE ATG Extract-0083","ix":83,"v":0},{"ty":6,"nm":"Cleanup 4","mn":"ADBE ATG Extract-0084","ix":84,"v":0},{"ty":10,"nm":"Path","mn":"ADBE ATG Extract-0085","ix":85,"v":{"a":0,"k":0,"ix":85}},{"ty":0,"nm":"Brush Radius","mn":"ADBE ATG Extract-0086","ix":86,"v":{"a":0,"k":5,"ix":86}},{"ty":0,"nm":"Brush Pressure","mn":"ADBE ATG Extract-0087","ix":87,"v":{"a":0,"k":0.5,"ix":87}},{"ty":6,"nm":"","mn":"ADBE ATG Extract-0088","ix":88,"v":0},{"ty":6,"nm":"Cleanup 5","mn":"ADBE ATG Extract-0089","ix":89,"v":0},{"ty":10,"nm":"Path","mn":"ADBE ATG Extract-0090","ix":90,"v":{"a":0,"k":0,"ix":90}},{"ty":0,"nm":"Brush Radius","mn":"ADBE ATG Extract-0091","ix":91,"v":{"a":0,"k":5,"ix":91}},{"ty":0,"nm":"Brush Pressure","mn":"ADBE ATG Extract-0092","ix":92,"v":{"a":0,"k":0.5,"ix":92}},{"ty":6,"nm":"","mn":"ADBE ATG Extract-0093","ix":93,"v":0},{"ty":6,"nm":"Cleanup 6","mn":"ADBE ATG Extract-0094","ix":94,"v":0},{"ty":10,"nm":"Path","mn":"ADBE ATG Extract-0095","ix":95,"v":{"a":0,"k":0,"ix":95}},{"ty":0,"nm":"Brush Radius","mn":"ADBE ATG Extract-0096","ix":96,"v":{"a":0,"k":5,"ix":96}},{"ty":0,"nm":"Brush Pressure","mn":"ADBE ATG Extract-0097","ix":97,"v":{"a":0,"k":0.5,"ix":97}},{"ty":6,"nm":"","mn":"ADBE ATG Extract-0098","ix":98,"v":0},{"ty":6,"nm":"Cleanup 7","mn":"ADBE ATG Extract-0099","ix":99,"v":0},{"ty":10,"nm":"Path","mn":"ADBE ATG Extract-0100","ix":100,"v":{"a":0,"k":0,"ix":100}},{"ty":0,"nm":"Brush Radius","mn":"ADBE ATG Extract-0101","ix":101,"v":{"a":0,"k":5,"ix":101}},{"ty":0,"nm":"Brush Pressure","mn":"ADBE ATG Extract-0102","ix":102,"v":{"a":0,"k":0.5,"ix":102}},{"ty":6,"nm":"","mn":"ADBE ATG Extract-0103","ix":103,"v":0},{"ty":6,"nm":"Cleanup 8","mn":"ADBE ATG Extract-0104","ix":104,"v":0},{"ty":10,"nm":"Path","mn":"ADBE ATG Extract-0105","ix":105,"v":{"a":0,"k":0,"ix":105}},{"ty":0,"nm":"Brush Radius","mn":"ADBE ATG Extract-0106","ix":106,"v":{"a":0,"k":5,"ix":106}},{"ty":0,"nm":"Brush Pressure","mn":"ADBE ATG Extract-0107","ix":107,"v":{"a":0,"k":0.5,"ix":107}},{"ty":6,"nm":"","mn":"ADBE ATG Extract-0108","ix":108,"v":0},{"ty":6,"nm":"","mn":"ADBE ATG Extract-0109","ix":109,"v":0},{"ty":0,"nm":"Edge Thin","mn":"ADBE ATG Extract-0110","ix":110,"v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":17,"s":[0],"e":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":29,"s":[0],"e":[1.08]},{"t":30}],"ix":110}},{"ty":0,"nm":"Edge Feather","mn":"ADBE ATG Extract-0111","ix":111,"v":{"a":0,"k":0,"ix":111}},{"ty":0,"nm":"Edge Threshold","mn":"ADBE ATG Extract-0112","ix":112,"v":{"a":0,"k":0,"ix":112}},{"ty":7,"nm":"Invert Extraction","mn":"ADBE ATG Extract-0113","ix":113,"v":{"a":0,"k":0,"ix":113}},{"ty":0,"nm":"Blend with Original","mn":"ADBE ATG Extract-0114","ix":114,"v":{"a":0,"k":0,"ix":114}}]}],"w":1000,"h":1000,"ip":1,"op":37,"st":1,"bm":0},{"ddd":0,"ind":3,"ty":0,"nm":"Icon8-snow.ai Comp 1","cl":"ai","refId":"comp_2","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":30,"s":[100],"e":[0]},{"t":34}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":0.483},"o":{"x":0.333,"y":0},"n":"0p667_0p483_0p333_0","t":17,"s":[819.5,752.5,0],"e":[693.533,621.517,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0.431},"n":"0p667_1_0p333_0p431","t":30,"s":[693.533,621.517,0],"e":[626.5,546.5,0],"to":[0,0,0],"ti":[0,0,0]},{"t":36}],"ix":2},"a":{"a":0,"k":[500,500,0],"ix":1},"s":{"a":0,"k":[239,239,100],"ix":6}},"ao":0,"ef":[{"ty":5,"nm":"Inner/Outer Key","np":116,"mn":"ADBE ATG Extract","ix":1,"en":1,"ef":[{"ty":10,"nm":"Foreground (Inside)","mn":"ADBE ATG Extract-0001","ix":1,"v":{"a":0,"k":0,"ix":1}},{"ty":6,"nm":"Additional Foreground","mn":"ADBE ATG Extract-0002","ix":2,"v":0},{"ty":10,"nm":"Foreground 2","mn":"ADBE ATG Extract-0003","ix":3,"v":{"a":0,"k":0,"ix":3}},{"ty":10,"nm":"Foreground 3","mn":"ADBE ATG Extract-0004","ix":4,"v":{"a":0,"k":0,"ix":4}},{"ty":10,"nm":"Foreground 4","mn":"ADBE ATG Extract-0005","ix":5,"v":{"a":0,"k":0,"ix":5}},{"ty":10,"nm":"Foreground 5","mn":"ADBE ATG Extract-0006","ix":6,"v":{"a":0,"k":0,"ix":6}},{"ty":10,"nm":"Foreground 6","mn":"ADBE ATG Extract-0007","ix":7,"v":{"a":0,"k":0,"ix":7}},{"ty":10,"nm":"Foreground 7","mn":"ADBE ATG Extract-0008","ix":8,"v":{"a":0,"k":0,"ix":8}},{"ty":10,"nm":"Foreground 8","mn":"ADBE ATG Extract-0009","ix":9,"v":{"a":0,"k":0,"ix":9}},{"ty":10,"nm":"Foreground 9","mn":"ADBE ATG Extract-0010","ix":10,"v":{"a":0,"k":0,"ix":10}},{"ty":10,"nm":"Foreground 10","mn":"ADBE ATG Extract-0011","ix":11,"v":{"a":0,"k":0,"ix":11}},{"ty":6,"nm":"","mn":"ADBE ATG Extract-0012","ix":12,"v":0},{"ty":10,"nm":"Background (Outside)","mn":"ADBE ATG Extract-0013","ix":13,"v":{"a":0,"k":0,"ix":13}},{"ty":6,"nm":"Additional Background","mn":"ADBE ATG Extract-0014","ix":14,"v":0},{"ty":10,"nm":"Background 2","mn":"ADBE ATG Extract-0015","ix":15,"v":{"a":0,"k":0,"ix":15}},{"ty":10,"nm":"Background 3","mn":"ADBE ATG Extract-0016","ix":16,"v":{"a":0,"k":0,"ix":16}},{"ty":10,"nm":"Background 4","mn":"ADBE ATG Extract-0017","ix":17,"v":{"a":0,"k":0,"ix":17}},{"ty":10,"nm":"Background 5","mn":"ADBE ATG Extract-0018","ix":18,"v":{"a":0,"k":0,"ix":18}},{"ty":10,"nm":"Background 6","mn":"ADBE ATG Extract-0019","ix":19,"v":{"a":0,"k":0,"ix":19}},{"ty":10,"nm":"Background 7","mn":"ADBE ATG Extract-0020","ix":20,"v":{"a":0,"k":0,"ix":20}},{"ty":10,"nm":"Background 8","mn":"ADBE ATG Extract-0021","ix":21,"v":{"a":0,"k":0,"ix":21}},{"ty":10,"nm":"Background 9","mn":"ADBE ATG Extract-0022","ix":22,"v":{"a":0,"k":0,"ix":22}},{"ty":10,"nm":"Background 10","mn":"ADBE ATG Extract-0023","ix":23,"v":{"a":0,"k":0,"ix":23}},{"ty":6,"nm":"","mn":"ADBE ATG Extract-0024","ix":24,"v":0},{"ty":0,"nm":"Single Mask Highlight Radius","mn":"ADBE ATG Extract-0025","ix":25,"v":{"a":0,"k":5,"ix":25}},{"ty":6,"nm":"Cleanup Foreground","mn":"ADBE ATG Extract-0026","ix":26,"v":0},{"ty":6,"nm":"Cleanup 1","mn":"ADBE ATG Extract-0027","ix":27,"v":0},{"ty":10,"nm":"Path","mn":"ADBE ATG Extract-0028","ix":28,"v":{"a":0,"k":0,"ix":28}},{"ty":0,"nm":"Brush Radius","mn":"ADBE ATG Extract-0029","ix":29,"v":{"a":0,"k":5,"ix":29}},{"ty":0,"nm":"Brush Pressure","mn":"ADBE ATG Extract-0030","ix":30,"v":{"a":0,"k":0.5,"ix":30}},{"ty":6,"nm":"","mn":"ADBE ATG Extract-0031","ix":31,"v":0},{"ty":6,"nm":"Cleanup 2","mn":"ADBE ATG Extract-0032","ix":32,"v":0},{"ty":10,"nm":"Path","mn":"ADBE ATG Extract-0033","ix":33,"v":{"a":0,"k":0,"ix":33}},{"ty":0,"nm":"Brush Radius","mn":"ADBE ATG Extract-0034","ix":34,"v":{"a":0,"k":5,"ix":34}},{"ty":0,"nm":"Brush Pressure","mn":"ADBE ATG Extract-0035","ix":35,"v":{"a":0,"k":0.5,"ix":35}},{"ty":6,"nm":"","mn":"ADBE ATG Extract-0036","ix":36,"v":0},{"ty":6,"nm":"Cleanup 3","mn":"ADBE ATG Extract-0037","ix":37,"v":0},{"ty":10,"nm":"Path","mn":"ADBE ATG Extract-0038","ix":38,"v":{"a":0,"k":0,"ix":38}},{"ty":0,"nm":"Brush Radius","mn":"ADBE ATG Extract-0039","ix":39,"v":{"a":0,"k":5,"ix":39}},{"ty":0,"nm":"Brush Pressure","mn":"ADBE ATG Extract-0040","ix":40,"v":{"a":0,"k":0.5,"ix":40}},{"ty":6,"nm":"","mn":"ADBE ATG Extract-0041","ix":41,"v":0},{"ty":6,"nm":"Cleanup 4","mn":"ADBE ATG Extract-0042","ix":42,"v":0},{"ty":10,"nm":"Path","mn":"ADBE ATG Extract-0043","ix":43,"v":{"a":0,"k":0,"ix":43}},{"ty":0,"nm":"Brush Radius","mn":"ADBE ATG Extract-0044","ix":44,"v":{"a":0,"k":5,"ix":44}},{"ty":0,"nm":"Brush Pressure","mn":"ADBE ATG Extract-0045","ix":45,"v":{"a":0,"k":0.5,"ix":45}},{"ty":6,"nm":"","mn":"ADBE ATG Extract-0046","ix":46,"v":0},{"ty":6,"nm":"Cleanup 5","mn":"ADBE ATG Extract-0047","ix":47,"v":0},{"ty":10,"nm":"Path","mn":"ADBE ATG Extract-0048","ix":48,"v":{"a":0,"k":0,"ix":48}},{"ty":0,"nm":"Brush Radius","mn":"ADBE ATG Extract-0049","ix":49,"v":{"a":0,"k":5,"ix":49}},{"ty":0,"nm":"Brush Pressure","mn":"ADBE ATG Extract-0050","ix":50,"v":{"a":0,"k":0.5,"ix":50}},{"ty":6,"nm":"","mn":"ADBE ATG Extract-0051","ix":51,"v":0},{"ty":6,"nm":"Cleanup 6","mn":"ADBE ATG Extract-0052","ix":52,"v":0},{"ty":10,"nm":"Path","mn":"ADBE ATG Extract-0053","ix":53,"v":{"a":0,"k":0,"ix":53}},{"ty":0,"nm":"Brush Radius","mn":"ADBE ATG Extract-0054","ix":54,"v":{"a":0,"k":5,"ix":54}},{"ty":0,"nm":"Brush Pressure","mn":"ADBE ATG Extract-0055","ix":55,"v":{"a":0,"k":0.5,"ix":55}},{"ty":6,"nm":"","mn":"ADBE ATG Extract-0056","ix":56,"v":0},{"ty":6,"nm":"Cleanup 7","mn":"ADBE ATG Extract-0057","ix":57,"v":0},{"ty":10,"nm":"Path","mn":"ADBE ATG Extract-0058","ix":58,"v":{"a":0,"k":0,"ix":58}},{"ty":0,"nm":"Brush Radius","mn":"ADBE ATG Extract-0059","ix":59,"v":{"a":0,"k":5,"ix":59}},{"ty":0,"nm":"Brush Pressure","mn":"ADBE ATG Extract-0060","ix":60,"v":{"a":0,"k":0.5,"ix":60}},{"ty":6,"nm":"","mn":"ADBE ATG Extract-0061","ix":61,"v":0},{"ty":6,"nm":"Cleanup 8","mn":"ADBE ATG Extract-0062","ix":62,"v":0},{"ty":10,"nm":"Path","mn":"ADBE ATG Extract-0063","ix":63,"v":{"a":0,"k":0,"ix":63}},{"ty":0,"nm":"Brush Radius","mn":"ADBE ATG Extract-0064","ix":64,"v":{"a":0,"k":5,"ix":64}},{"ty":0,"nm":"Brush Pressure","mn":"ADBE ATG Extract-0065","ix":65,"v":{"a":0,"k":0.5,"ix":65}},{"ty":6,"nm":"","mn":"ADBE ATG Extract-0066","ix":66,"v":0},{"ty":6,"nm":"","mn":"ADBE ATG Extract-0067","ix":67,"v":0},{"ty":6,"nm":"Cleanup Background","mn":"ADBE ATG Extract-0068","ix":68,"v":0},{"ty":6,"nm":"Cleanup 1","mn":"ADBE ATG Extract-0069","ix":69,"v":0},{"ty":10,"nm":"Path","mn":"ADBE ATG Extract-0070","ix":70,"v":{"a":0,"k":0,"ix":70}},{"ty":0,"nm":"Brush Radius","mn":"ADBE ATG Extract-0071","ix":71,"v":{"a":0,"k":5,"ix":71}},{"ty":0,"nm":"Brush Pressure","mn":"ADBE ATG Extract-0072","ix":72,"v":{"a":0,"k":0.5,"ix":72}},{"ty":6,"nm":"","mn":"ADBE ATG Extract-0073","ix":73,"v":0},{"ty":6,"nm":"Cleanup 2","mn":"ADBE ATG Extract-0074","ix":74,"v":0},{"ty":10,"nm":"Path","mn":"ADBE ATG Extract-0075","ix":75,"v":{"a":0,"k":0,"ix":75}},{"ty":0,"nm":"Brush Radius","mn":"ADBE ATG Extract-0076","ix":76,"v":{"a":0,"k":5,"ix":76}},{"ty":0,"nm":"Brush Pressure","mn":"ADBE ATG Extract-0077","ix":77,"v":{"a":0,"k":0.5,"ix":77}},{"ty":6,"nm":"","mn":"ADBE ATG Extract-0078","ix":78,"v":0},{"ty":6,"nm":"Cleanup 3","mn":"ADBE ATG Extract-0079","ix":79,"v":0},{"ty":10,"nm":"Path","mn":"ADBE ATG Extract-0080","ix":80,"v":{"a":0,"k":0,"ix":80}},{"ty":0,"nm":"Brush Radius","mn":"ADBE ATG Extract-0081","ix":81,"v":{"a":0,"k":5,"ix":81}},{"ty":0,"nm":"Brush Pressure","mn":"ADBE ATG Extract-0082","ix":82,"v":{"a":0,"k":0.5,"ix":82}},{"ty":6,"nm":"","mn":"ADBE ATG Extract-0083","ix":83,"v":0},{"ty":6,"nm":"Cleanup 4","mn":"ADBE ATG Extract-0084","ix":84,"v":0},{"ty":10,"nm":"Path","mn":"ADBE ATG Extract-0085","ix":85,"v":{"a":0,"k":0,"ix":85}},{"ty":0,"nm":"Brush Radius","mn":"ADBE ATG Extract-0086","ix":86,"v":{"a":0,"k":5,"ix":86}},{"ty":0,"nm":"Brush Pressure","mn":"ADBE ATG Extract-0087","ix":87,"v":{"a":0,"k":0.5,"ix":87}},{"ty":6,"nm":"","mn":"ADBE ATG Extract-0088","ix":88,"v":0},{"ty":6,"nm":"Cleanup 5","mn":"ADBE ATG Extract-0089","ix":89,"v":0},{"ty":10,"nm":"Path","mn":"ADBE ATG Extract-0090","ix":90,"v":{"a":0,"k":0,"ix":90}},{"ty":0,"nm":"Brush Radius","mn":"ADBE ATG Extract-0091","ix":91,"v":{"a":0,"k":5,"ix":91}},{"ty":0,"nm":"Brush Pressure","mn":"ADBE ATG Extract-0092","ix":92,"v":{"a":0,"k":0.5,"ix":92}},{"ty":6,"nm":"","mn":"ADBE ATG Extract-0093","ix":93,"v":0},{"ty":6,"nm":"Cleanup 6","mn":"ADBE ATG Extract-0094","ix":94,"v":0},{"ty":10,"nm":"Path","mn":"ADBE ATG Extract-0095","ix":95,"v":{"a":0,"k":0,"ix":95}},{"ty":0,"nm":"Brush Radius","mn":"ADBE ATG Extract-0096","ix":96,"v":{"a":0,"k":5,"ix":96}},{"ty":0,"nm":"Brush Pressure","mn":"ADBE ATG Extract-0097","ix":97,"v":{"a":0,"k":0.5,"ix":97}},{"ty":6,"nm":"","mn":"ADBE ATG Extract-0098","ix":98,"v":0},{"ty":6,"nm":"Cleanup 7","mn":"ADBE ATG Extract-0099","ix":99,"v":0},{"ty":10,"nm":"Path","mn":"ADBE ATG Extract-0100","ix":100,"v":{"a":0,"k":0,"ix":100}},{"ty":0,"nm":"Brush Radius","mn":"ADBE ATG Extract-0101","ix":101,"v":{"a":0,"k":5,"ix":101}},{"ty":0,"nm":"Brush Pressure","mn":"ADBE ATG Extract-0102","ix":102,"v":{"a":0,"k":0.5,"ix":102}},{"ty":6,"nm":"","mn":"ADBE ATG Extract-0103","ix":103,"v":0},{"ty":6,"nm":"Cleanup 8","mn":"ADBE ATG Extract-0104","ix":104,"v":0},{"ty":10,"nm":"Path","mn":"ADBE ATG Extract-0105","ix":105,"v":{"a":0,"k":0,"ix":105}},{"ty":0,"nm":"Brush Radius","mn":"ADBE ATG Extract-0106","ix":106,"v":{"a":0,"k":5,"ix":106}},{"ty":0,"nm":"Brush Pressure","mn":"ADBE ATG Extract-0107","ix":107,"v":{"a":0,"k":0.5,"ix":107}},{"ty":6,"nm":"","mn":"ADBE ATG Extract-0108","ix":108,"v":0},{"ty":6,"nm":"","mn":"ADBE ATG Extract-0109","ix":109,"v":0},{"ty":0,"nm":"Edge Thin","mn":"ADBE ATG Extract-0110","ix":110,"v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[0],"e":[-0.037]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":17,"s":[-0.037],"e":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":29,"s":[0],"e":[1.4]},{"t":30}],"ix":110}},{"ty":0,"nm":"Edge Feather","mn":"ADBE ATG Extract-0111","ix":111,"v":{"a":0,"k":0,"ix":111}},{"ty":0,"nm":"Edge Threshold","mn":"ADBE ATG Extract-0112","ix":112,"v":{"a":0,"k":0,"ix":112}},{"ty":7,"nm":"Invert Extraction","mn":"ADBE ATG Extract-0113","ix":113,"v":{"a":0,"k":0,"ix":113}},{"ty":0,"nm":"Blend with Original","mn":"ADBE ATG Extract-0114","ix":114,"v":{"a":0,"k":0,"ix":114}}]}],"w":1000,"h":1000,"ip":0,"op":36,"st":0,"bm":0}]},{"id":"comp_2","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Icon8-snow Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":14,"s":[0],"e":[99.4]},{"t":35}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.813,"y":0},"o":{"x":0.333,"y":0},"n":"0p813_0_0p333_0","t":-10,"s":[500,500,0],"e":[489.036,488.694,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0.057},"n":"0p667_1_0p333_0p057","t":20,"s":[489.036,488.694,0],"e":[396,394,0],"to":[0,0,0],"ti":[0,0,0]},{"t":28}],"ix":2},"a":{"a":0,"k":[144,144,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"n":["0p667_1_0p333_0","0p667_1_0p333_0","0p667_1_0p333_0"],"t":14,"s":[50,50,100],"e":[133,133,100]},{"t":35}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[36.667,-28.5],[0.167,-26.5],[-13.833,-25.5],[-20.5,-13.833],[-19.417,-3.5],[-12,3.167],[-3.333,20.667],[0.167,22.167],[11,14.5],[13.667,17.167],[35,9.167],[24.5,-4]],"o":[[-35.333,-23],[-13.333,-4.5],[-30.833,9.5],[-14.917,18.25],[5.583,60],[13.5,27.667],[8.667,8.667],[26.167,7.667],[17.5,-0.5],[16.667,-10.833],[1.46,-6.96],[2,-19.5]],"v":[[-3.417,-111.25],[-79.417,-77.25],[-103.417,-41.25],[-110.75,20.083],[-92.75,68.083],[-26.75,112.083],[32.583,112.083],[68.583,94.083],[99.25,58.75],[114.583,16.083],[99.25,-55.917],[69.25,-87.25]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.470999983245,0.447000002394,0.969000004787,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":1,"lj":1,"ml":10,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[138.083,144.583],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":36,"st":0,"bm":0}]},{"id":"comp_3","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Layer 10/Icon8 Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[495.5,502.5,0],"ix":2},"a":{"a":0,"k":[126.5,126.5,0],"ix":1},"s":{"a":0,"k":[410.132,410.132,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[64.445,0],[0,-64.445],[-64.445,0],[0,64.445]],"o":[[-64.445,0],[0,64.445],[64.445,0],[0,-64.445]],"v":[[126.813,9.375],[10.125,126.063],[126.813,242.75],[243.5,126.063]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-62.822],[62.822,0],[0,62.822],[-62.822,0]],"o":[[0,62.822],[-62.822,0],[0,-62.822],[62.822,0]],"v":[[113.75,0],[0,113.75],[-113.75,0],[0,-113.75]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.470999983245,0.447000002394,0.969000004787,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":1,"lj":1,"ml":10,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[126.25,126.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-57.34,-21.569],[-32.827,4.668],[-22.154,-12.432],[9.346,21.569],[27.346,-8.431],[50.346,11.069],[57.34,-10.765]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.470999983245,0.447000002394,0.969000004787,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":1,"lj":1,"ml":10,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[86.154,122.598],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-3.237,-1.518],[0,0],[-14.72,-13.479]],"o":[[18.773,-23.882],[0,0],[3.237,1.519],[1.104,1.438],[0,0]],"v":[[-98.015,-2.231],[-60.46,-53.343],[-38.352,-78.544],[5.164,-55.1],[98.015,80.062]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.470999983245,0.447000002394,0.969000004787,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":1,"lj":1,"ml":10,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[110.515,124.731],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":45,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Layer 2/Icon8 Outlines","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[111,171,0],"ix":2},"a":{"a":0,"k":[98.5,70,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0]],"o":[[0,0]],"v":[[-47.289,49.273]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-9.15,-9.42],[32.36,0],[0,62.82],[-0.05,1.27],[-5.08,6.88],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-20.71,21.69],[-62.82,0],[0,-1.29],[5.58,-7.1],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[23.89,36.05]],"v":[[98.015,34.275],[15.735,69.485],[-98.015,-44.265],[-97.945,-48.105],[-81.705,-69.485],[-57.185,-43.245],[-46.515,-60.345],[-15.015,-26.345],[2.985,-56.345],[25.985,-36.845],[32.975,-58.685]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.862999949736,0.862999949736,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.266,69.735],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.02,-0.03]],"o":[[-0.02,0.03],[0,0]],"v":[[0.035,-0.045],[-0.035,0.045]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.709999952129,0.709999952129,0.709999952129,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0.285,21.675],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":45,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Pre-comp 3","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[556,528,0],"ix":2},"a":{"a":0,"k":[540,540,0],"ix":1},"s":{"a":0,"k":[174.074,174.074,100],"ix":6}},"ao":0,"w":1080,"h":1080,"ip":0,"op":36,"st":0,"bm":0}]} \ No newline at end of file diff --git a/src/resources/assets/js/components/bulma/media.vue b/src/resources/assets/js/components/bulma/media.vue index 74ce579..a15b895 100644 --- a/src/resources/assets/js/components/bulma/media.vue +++ b/src/resources/assets/js/components/bulma/media.vue @@ -9,8 +9,17 @@ // fa fa-angle-double-right // fa fa-angle-double-left +import Form from './mixins/methods/form' +import FileFiltration from './mixins/methods/filtration' +import BulkSelect from './mixins/methods/bulk' +import SelectedFile from './mixins/methods/selected' +import Utilities from './mixins/methods/utils' +import Watchers from './mixins/watch' + export default { name: 'media-manager', + mixins: [Form, FileFiltration, BulkSelect, SelectedFile, Utilities, Watchers], + props: ['filesRoute', 'dirsRoute', 'hideExt'], data() { return { files: [], @@ -18,20 +27,22 @@ export default { directories: [], filterdList: [], bulkList: [], - showBy: null, - currentFilterName: undefined, selectedFile: undefined, + showBy: undefined, + currentFilterName: undefined, searchItemsCount: undefined, - searchFor: undefined + searchFor: undefined, + new_folder_name: undefined, + new_filename: undefined } }, computed: { allFiles() { if (typeof this.filterdList !== 'undefined' && this.filterdList.length > 0) { return this.filterdList - } else { - return this.files.items } + + return this.files.items }, allItemsCount() { if (typeof this.allFiles !== 'undefined' && this.allFiles.length > 0) { @@ -51,7 +62,6 @@ export default { this.initManager() }, methods: { - /* Render */ initManager() { let manager = this @@ -113,107 +123,81 @@ export default { if (!$('.modal').hasClass('is-active')) { // when search is not focused if (!$('.input').is(':focus')) { - // when no bulk selecting & no light box is active - if (!this.isBulkSelecting() && !this.lightBoxIsActive()) { - let cur = '' - let newSelected = '' - - if ((keycode(e) == 'left' || keycode(e) == 'up') && curSelected !== 0) { - newSelected = curSelected - 1 - cur = $('div[data-index="' + newSelected + '"]') - this.scrollToFile(cur) - } - - if ((keycode(e) == 'right' || keycode(e) == 'down') && curSelected < this.allItemsCount - 1) { - newSelected = curSelected + 1 - cur = $('div[data-index="' + newSelected + '"]') - this.scrollToFile(cur) - } + // lightbox is not active + if (!this.lightBoxIsActive()) { + // when no bulk selecting + if (!this.isBulkSelecting()) { + let cur = '' + let newSelected = '' + + if ((keycode(e) == 'left' || keycode(e) == 'up') && curSelected !== 0) { + newSelected = curSelected - 1 + cur = $('div[data-index="' + newSelected + '"]') + this.scrollToFile(cur) + } - // open folder - if (keycode(e) == 'enter') { - if (!this.selectedFileIs('folder')) { - return false + if ((keycode(e) == 'right' || keycode(e) == 'down') && curSelected < this.allItemsCount - 1) { + newSelected = curSelected + 1 + cur = $('div[data-index="' + newSelected + '"]') + this.scrollToFile(cur) } - this.currentFilterName = undefined - this.folders.push(this.selectedFile.name) - this.getFiles(this.folders) - } + // open folder + if (keycode(e) == 'enter') { + this.openFolder(this.selectedFile) + } - // go up a dir - if (keycode(e) == 'backspace') { - index = parseInt(this.folders.length) - 1 + // go up a dir + if (keycode(e) == 'backspace') { + let index = parseInt(this.folders.length) - 1 - if (index < 0) { - return false - } + if (index < 0) { + return false + } - if (index === 0) { - this.folders = [] - this.getFiles(this.folders) - } else { - this.folders = this.folders.splice(0, index) - this.getFiles(this.folders) + this.goToFolder(index) } - this.currentFilterName = undefined - } + // go to first / last item + if (this.allItemsCount) { + if (keycode(e) == 'home') { + this.scrollToFile() + } - // go to first / last item - if (this.allItemsCount) { - if (keycode(e) == 'home') { - this.scrollToFile() + if (keycode(e) == 'end') { + let index = this.allItemsCount - 1 + cur = $('div[data-index="' + index + '"]') + this.scrollToFile(cur) + } } - if (keycode(e) == 'end') { - let index = this.allItemsCount - 1 - cur = $('div[data-index="' + index + '"]') - this.scrollToFile(cur) + // file upload + if (keycode(e) == 'u') { + $('#upload').trigger('click') } - } - // file upload - if (keycode(e) == 'u') { - $('#upload').trigger('click') - } - } + // play-pause for media + if (keycode(e) == 'space' && e.target == document.body) { + // prevent body from scrolling + e.preventDefault() - // quick view for images / play-pause for media - if (!this.isBulkSelecting()) { - if (keycode(e) == 'space' && e.target == document.body) { - // prevent body from scrolling - e.preventDefault() - - // play-pause media - if (this.selectedFileIs('video') || this.selectedFileIs('audio')) { - return $('.player')[0].paused - ? $('.player')[0].play() - : $('.player')[0].pause() - } + if (this.selectedFileIs('video') || this.selectedFileIs('audio')) { + return $('.player')[0].paused + ? $('.player')[0].play() + : $('.player')[0].pause() + } - // quick view image - if (this.selectedFileIs('image')) { - if (this.lightBoxIsActive()) { - $('#vue-lightboxOverlay').trigger('click') - } else { - $('.quickView').trigger('click') + // "show" image quick view + if (this.selectedFileIs('image')) { + this.noScroll('add') + this.toggleModal('#img_modal') } } } + /* end of no bulk selection */ - // quick view image "esc" - if (keycode(e) == 'esc' && this.selectedFileIs('image') && this.lightBoxIsActive()) { - $('#vue-lightboxOverlay').trigger('click') - e.preventDefault() - } - } - /* end of no bulk selection */ - - // when there are files - if (this.allItemsCount) { - // when lightbox is not active - if (!this.lightBoxIsActive()) { + // when there are files + if (this.allItemsCount) { // bulk select if (keycode(e) == 'b') { $('#blk_slct').trigger('click') @@ -239,26 +223,33 @@ export default { $('#move').trigger('click') } } - /* end when lightbox is not active */ - } - /* end of there are files */ + /* end of there are files */ - // toggle file details box - if (keycode(e) == 't' && !this.lightBoxIsActive()) { - $('.toggle').trigger('click') + // toggle file details sidebar + if (keycode(e) == 't') { + $('.toggle').trigger('click') + } } + /* end of no lightbox is active */ } /* end of search is not focused */ } /* end of modal isnt visible */ // when modal is visible - if (keycode(e) == 'enter') { - $('.modal.is-active').find('.submit').trigger('click') - } + else { + if (keycode(e) == 'enter') { + $('.modal.is-active').find('.submit').trigger('click') + } - if (keycode(e) == 'esc') { - this.toggleModal() + if (this.lightBoxIsActive() && keycode(e) == 'space') { + e.preventDefault() + this.toggleModal() + } + + if (keycode(e) == 'esc') { + this.toggleModal() + } } /* end of modal is visible */ }) @@ -366,34 +357,6 @@ export default { $('#new-upload').fadeToggle('fast') }) - // new folder - $('#new_folder_submit').click(() => { - $.post(route('media.new_folder'), { - current_path: this.files.path, - new_folder_name: $('#new_folder_name').val() - }, (data) => { - if (data.success) { - this.showNotif({ - title: 'Success', - body: `Successfully Created "${data.new_folder_name}" at "${data.full_path}"`, - type: 'success', - duration: 5 - }) - - this.getFiles(this.folders) - } else { - this.showNotif({ - title: 'Error', - body: data.message, - type: 'danger' - }) - } - - $('#new_folder_name').val('') - this.toggleModal() - }) - }) - // delete $('#delete').click(() => { if (!manager.isBulkSelecting()) { @@ -402,11 +365,13 @@ export default { } else { $('.folder_warning').hide() } - $('.confirm_delete').text(this.selectedFile.name) + + $('#confirm_delete').text(this.selectedFile.name) } if (this.bulkItemsCount) { $('.folder_warning').hide() + this.bulkList.some((item) => { if (item.type.includes('folder')) { $('.folder_warning').show() @@ -414,538 +379,6 @@ export default { }) } }) - - $('#confirm_delete_submit').click(() => { - if (this.bulkItemsCount) { - this.delete_file(this.bulkList) - $('#blk_slct').trigger('click') - } else { - this.delete_file([this.selectedFile]) - } - }) - - // move - $('#move_file_submit').click(() => { - if (this.bulkItemsCount) { - this.move_file(this.bulkList) - $('#blk_slct').trigger('click') - } else { - this.move_file([this.selectedFile]) - } - }) - - // rename - $('#rename_file_submit').click(() => { - let filename = this.selectedFile.name - let ext = filename.substring(filename.lastIndexOf('.') + 1) - let new_filename = $('#new_filename').val() + `.${ext}` - - $.post(route('media.rename_file'), { - folder_location: this.folders, - filename: filename, - new_filename: new_filename - }, (data) => { - if (data.success) { - this.showNotif({ - title: 'Success', - body: `Successfully Renamed "${filename}" to "${data.new_filename}"`, - type: 'success', - duration: 5 - }) - - this.updateItemName(this.selectedFile, filename, data.new_filename) - - if (this.selectedFileIs('folder')) { - this.updateDirsList() - } - } else { - this.showNotif({ - title: 'Error', - body: data.message, - type: 'danger' - }) - } - - this.toggleModal() - }) - }) - }, - - /* Main */ - getFiles(folders) { - $('#file_loader').show() - this.searchFor = undefined - this.showFilesOfType('all') - this.showBy = null - - let folder_location = '' - - if (folders != '/') { - folder_location = '/' + folders.join('/') - } else { - folder_location = '/' - } - - // files list - $.post(route('media.files'), { - folder: folder_location - }, (res) => { - this.files = res - $('#file_loader').hide() - this.selectFirst() - $('#right').fadeIn() - }) - - // dirs list - this.updateDirsList() - }, - bytesToSize(bytes) { - if (bytes === 0) { - return '0 Bytes' - } - - let sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'] - let i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024))) - - return Math.round(bytes / Math.pow(1024, i), 2) + ' ' + sizes[i] - }, - delete_file(files) { - $.post(route('media.delete_file_folder'), { - folder_location: this.folders, - deleted_files: files - }, (res) => { - res.data.map((item) => { - if (item.success) { - this.showNotif({ - title: 'Success', - body: `Successfully Deleted "${item.name}"`, - type: 'warning', - duration: 5 - }) - - this.removeFromLists(item.name) - } else { - this.showNotif({ - title: 'Error', - body: item.message, - type: 'danger' - }) - } - }) - - this.toggleModal() - this.updateFoundCount(files.length) - this.selectFirst() - }) - }, - move_file(files) { - let destination = $('#move_folder_dropdown').val() - - $.post(route('media.move_file'), { - folder_location: this.folders, - destination: destination, - moved_files: files - }, (res) => { - res.data.map((item) => { - if (item.success) { - this.showNotif({ - title: 'Success', - body: `Successfully moved "${item.name}" to "${destination}"`, - type: 'success', - duration: 5 - }) - - this.removeFromLists(item.name) - this.updateFolderCount(destination, 1) - - // update dirs list after move - if (item.type.includes('folder')) { - this.updateDirsList() - } - } else { - this.showNotif({ - title: 'Error', - body: item.message, - type: 'danger' - }) - } - }) - - // update folder count when folder is moved into another - files.map((e) => { - if (e.items && e.items > 0) { - this.updateFolderCount(destination, e.items) - } - }) - - this.toggleModal() - this.updateFoundCount(files.length) - this.selectFirst() - }) - }, - - /* Bulk */ - isBulkSelecting() { - return $('#blk_slct').hasClass('is-danger') - }, - IsInBulkList(file) { - return this.bulkList.includes(file) - }, - pushtoBulkList(file) { - if (!this.bulkItemsCount) { - return this.bulkList.push(file) - } - - if (!this.bulkList.includes(file)) { - return this.bulkList.push(file) - } else { - this.bulkList.splice(this.bulkList.indexOf(file), 1) - - // select prev item - if (this.bulkItemsCount) { - this.selectedFile = this.bulkList[this.bulkItemsCount - 1] - } else { - // clear slection - this.clearSelected() - } - } - }, - - /* Selected */ - selectFirst() { - this.$nextTick(() => { - let file = $('div[data-index="0"]') - if (file.length > 0) { - file.trigger('click') - } - }) - }, - setSelected(file) { - this.clearSelected() - $('div[data-folder="' + file.name + '"]').addClass('selected') - this.selectedFile = file - - if (this.isBulkSelecting()) { - this.pushtoBulkList(file) - } - }, - clearSelected() { - this.selectedFile = undefined - $('#files li .selected').removeClass('selected') - }, - openFolder(file) { - if (!this.isBulkSelecting()) { - if (!this.fileTypeIs(file, 'folder')) { - return false - } - - this.folders.push(file.name) - this.getFiles(this.folders) - } - - this.currentFilterName = undefined - }, - goToFolder(index) { - if (!this.isBulkSelecting()) { - this.folders = this.folders.splice(0, index) - this.getFiles(this.folders) - } - }, - scrollToFile(file) { - if (!file) { - file = $('div[data-index="0"]') - } - - $(file).trigger('click') - - $('#left').scrollTo($(file), 0, { - margin: true, - offset: -8 - }) - }, - - /* Filtration */ - btnFilter(val) { - if (val == 'all') { - return this.filterdList.length - } - - return this.files.items.some((item) => { - return this.fileTypeIs(item, val) - }) - }, - selectedFileIs(val) { - if (typeof this.selectedFile !== 'undefined') { - return this.fileTypeIs(this.selectedFile, val) - } - }, - filterNameIs(val) { - return this.currentFilterName == val - }, - fileTypeIs(item, val) { - if (val == 'text') { - if (!item.type.includes('folder') && - !item.type.includes('image') && - !item.type.includes('video') && - !item.type.includes('audio')) { - return true - } - } else { - return item.type.includes(val) - } - }, - showFilesOfType(val) { - if (this.currentFilterName == val) { - return false - } - - if (val == 'all') { - this.filterdList = [] - this.currentFilterName = undefined - } else { - this.filterdList = this.files.items.filter((item) => { - return this.fileTypeIs(item, val) - }) - - this.currentFilterName = val - } - - if (!this.isBulkSelecting()) { - this.clearSelected() - this.selectFirst() - } - - if (this.searchFor) { - this.updateSearchCount() - } - }, - filterDir(dir) { - // dont show dirs that have similarity with selected item(s) - if (this.bulkItemsCount) { - if (this.bulkList.filter((e) => dir.match(`(/?)${e.name}(/?)`)).length > 0) { - return false - } else { - return true - } - } else { - return this.selectedFile && !dir.includes(this.selectedFile.name) - } - }, - checkForFolders() { - if ($('#move_folder_dropdown').val() !== null) { - return true - } else { - return false - } - }, - - /* Operations */ - removeFromLists(name) { - if (this.filterdList.length) { - let list = this.filterdList - - list.map((e) => { - if (e.name.includes(name)) { - list.splice(list.indexOf(e), 1) - } - }) - } - - if (this.directories.length) { - let list = this.directories - - list.map((e) => { - if (e.includes(name)) { - list.splice(list.indexOf(e), 1) - } - }) - } - - this.files.items.map((e) => { - if (e.name.includes(name)) { - let list = this.files.items - - list.splice(list.indexOf(e), 1) - } - }) - - this.clearSelected() - }, - updateFolderCount(destination, count) { - if (destination !== '../') { - - if (destination.includes('/')) { - destination = destination.split('/').shift() - } - - if (this.filterdList.length) { - this.filterdList.map((e) => { - if (e.name.includes(destination)) { - e.items += parseInt(count) - } - }) - } - - this.files.items.map((e) => { - if (e.name.includes(destination)) { - e.items += parseInt(count) - } - }) - } - }, - updateItemName(item, oldName, newName) { - // update the main files list - let filesIndex = this.files.items[this.files.items.indexOf(item)] - filesIndex.name = newName - filesIndex.path = filesIndex.path.replace(oldName, newName) - - // if found in the filterd list, then update it aswell - if (this.filterdList.includes(item)) { - let filterIndex = this.filterdList[this.filterdList.indexOf(item)] - filterIndex.name = newName - filesIndex.path = filterIndex.path.replace(oldName, newName) - } - }, - updateSearchCount() { - this.$nextTick(() => { - this.searchItemsCount = parseInt($('#files li').length) - - if (this.searchItemsCount == 0) { - $('#no_files').fadeIn() - } else { - $('#no_files').hide() - } - }) - }, - updateFoundCount(count) { - if (this.searchFor) { - this.searchItemsCount = parseInt(this.searchItemsCount - count) - } - }, - updateDirsList() { - $.post(route('media.directories'), { - folder_location: this.folders - }, (data) => { - this.directories = data - }) - }, - resetSearch() { - this.searchFor = undefined - }, - toggleModal(selector = null) { - if (!selector) { - // hide modal hook - EventHub.fire('modal-hide') - - $('html').removeClass('no-scroll') - return $('.modal').removeClass('is-active') - } - - // show modal hook - EventHub.fire('modal-show') - - $('html').addClass('no-scroll') - $(selector).addClass('is-active') - $(selector).find('input').focus() - }, - - /* Utils */ - lastItem(item, list) { - return item == list[list.length - 1] - }, - toggleInfo() { - $('#right').fadeToggle() - let span = $('.toggle').find('span').not('.icon') - span.text(span.text() == 'Close' ? 'Open' : 'Close') - $('.toggle').find('.fa').toggleClass('fa fa-angle-double-right').toggleClass('fa fa-angle-double-left') - }, - lightBoxIsActive() { - return $('#vue-lightboxOverlay').is(':visible') - }, - fileName(name) { - return name.replace(/(.[^.]*)$/, '') - }, - showNotif(data) { - EventHub.fire('showNotif', { - title: data.title, - body: data.body, - type: data.type, - duration: data.duration || null - }) - } - }, - watch: { - allFiles(newVal) { - if (newVal.length < 1) { - $('#no_files').fadeIn() - } else { - $('#no_files').hide() - } - }, - bulkList(val) { - if (val) { - // hide move button when all folders are selected - this.$nextTick(() => { - if (!this.checkForFolders()) { - $('#move').attr('disabled', true) - } - }) - } - - if (val == 0 && this.isBulkSelecting()) { - let toggle_text = $('#blk_slct_all').find('span').not('.icon') - $('#blk_slct_all').removeClass('is-warning') - $('#blk_slct_all').find('.fa').removeClass('fa-minus').addClass('fa-plus') - toggle_text.text('Select All') - } - }, - selectedFile(val) { - if (!val) { - $('#move').attr('disabled', true) - $('#rename').attr('disabled', true) - $('#delete').attr('disabled', true) - } else { - // hide move button when there is only one folder and its selected - this.$nextTick(() => { - if (!this.checkForFolders()) { - $('#move').attr('disabled', true) - } - }) - - $('#move').removeAttr('disabled') - $('#rename').removeAttr('disabled') - $('#delete').removeAttr('disabled') - } - }, - searchFor(val) { - if (val) { - this.updateSearchCount() - } - - // so we dont miss with the bulk selection list - if (!this.isBulkSelecting()) { - this.clearSelected() - this.selectFirst() - } - - this.searchItemsCount = undefined - }, - searchItemsCount(val) { - // make sure "no_files" is hidden when search query is cleared - if (val == undefined) { - $('#no_files').hide() - } - }, - showBy(val) { - if (val) { - if (val == 'clear') { - this.showBy = null - } - - if (!this.isBulkSelecting()) { - this.selectFirst() - } - } } }, render() {} diff --git a/src/resources/assets/js/components/bulma/mixins/methods/bulk.js b/src/resources/assets/js/components/bulma/mixins/methods/bulk.js new file mode 100644 index 0000000..7da2b74 --- /dev/null +++ b/src/resources/assets/js/components/bulma/mixins/methods/bulk.js @@ -0,0 +1,29 @@ +export default { + methods: { + isBulkSelecting() { + return $('#blk_slct').hasClass('is-danger') + }, + IsInBulkList(file) { + return this.bulkList.includes(file) + }, + pushtoBulkList(file) { + if (!this.bulkItemsCount) { + return this.bulkList.push(file) + } + + if (!this.bulkList.includes(file)) { + return this.bulkList.push(file) + } + + this.bulkList.splice(this.bulkList.indexOf(file), 1) + + // select prev item + if (this.bulkItemsCount) { + return this.selectedFile = this.bulkList[this.bulkItemsCount - 1] + } + + // clear slection + this.clearSelected() + } + } +} diff --git a/src/resources/assets/js/components/bulma/mixins/methods/filtration.js b/src/resources/assets/js/components/bulma/mixins/methods/filtration.js new file mode 100644 index 0000000..695014f --- /dev/null +++ b/src/resources/assets/js/components/bulma/mixins/methods/filtration.js @@ -0,0 +1,89 @@ +export default { + methods: { + btnFilter(val) { + if (val == 'all') { + return this.filterdList.length + } + + return this.files.items.some((item) => { + return this.fileTypeIs(item, val) + }) + }, + filterNameIs(val) { + return this.currentFilterName == val + }, + fileTypeIs(item, val) { + if (val == 'text') { + if (!item.type.includes('folder') && + !item.type.includes('image') && + !item.type.includes('video') && + !item.type.includes('audio')) { + return true + } + } + + return item.type.includes(val) + }, + showFilesOfType(val) { + if (this.currentFilterName == val) { + return false + } + + if (val == 'all') { + this.filterdList = [] + this.resetInput('currentFilterName') + } else { + this.filterdList = this.files.items.filter((item) => { + return this.fileTypeIs(item, val) + }) + + this.currentFilterName = val + } + + if (!this.isBulkSelecting()) { + this.clearSelected() + this.selectFirst() + } + + if (this.searchFor) { + this.updateSearchCount() + } + }, + filterDirList(dir) { + // dont show dirs that have similarity with selected item(s) + if (this.bulkItemsCount) { + if (this.bulkList.filter((e) => dir.match(`(/?)${e.name}(/?)`)).length > 0) { + return false + } + + return true + } + + return this.selectedFile && !dir.includes(this.selectedFile.name) + }, + + /* Search */ + updateSearchCount() { + let oldCount = this.searchItemsCount + + this.$nextTick(() => { + this.searchItemsCount = parseInt($('#files li').length) + + if (this.searchItemsCount == 0 && oldCount == 0) { + return + } + + if (this.searchItemsCount == 0) { + return this.noFiles('show') + } + + this.noFiles('hide') + }) + }, + updateFoundCount(count) { + if (this.searchFor) { + this.searchItemsCount = parseInt(this.searchItemsCount - count) + } + } + } +} diff --git a/src/resources/assets/js/components/bulma/mixins/methods/form.js b/src/resources/assets/js/components/bulma/mixins/methods/form.js new file mode 100644 index 0000000..bca1c2f --- /dev/null +++ b/src/resources/assets/js/components/bulma/mixins/methods/form.js @@ -0,0 +1,286 @@ +export default { + methods: { + /* Main */ + getFiles(folders) { + this.loadingFiles('show') + this.resetInput('searchFor') + this.resetInput('showBy') + this.showFilesOfType('all') + + let folder_location = '/' + + if (folders !== '/') { + folder_location = '/' + folders.join('/') + } + + // files list + $.post(this.filesRoute, { + folder: folder_location + }, (res) => { + this.files = res + this.loadingFiles('hide') + this.selectFirst() + $('#right').fadeIn() + + }).fail(() => { + this.ajaxError() + }) + + // dirs list + this.updateDirsList() + }, + updateDirsList() { + $.post(this.dirsRoute, { + folder_location: this.folders + }, (data) => { + this.directories = data + + }).fail(() => { + this.ajaxError() + }) + }, + + /* Tool-Bar */ + NewFolderForm(event) { + $.post(event.target.action, { + current_path: this.files.path, + new_folder_name: this.new_folder_name + }, (data) => { + if (data.success) { + this.showNotif({ + title: 'Success', + body: `Successfully Created "${data.new_folder_name}" at "${data.full_path}"`, + type: 'success', + duration: 3 + }) + + this.getFiles(this.folders) + } else { + this.showNotif({ + title: 'Error', + body: data.message, + type: 'danger' + }) + } + + this.resetInput('new_folder_name') + this.toggleModal() + this.scrollToFile() + + }).fail(() => { + this.ajaxError() + }) + }, + RenameFileForm(event) { + let filename = this.selectedFile.name + let changed = this.new_filename + + let ext = filename.lastIndexOf('.') > 0 ? filename.substring(filename.lastIndexOf('.') + 1) : null + let new_filename = ext == null ? changed : `${changed}.${ext}` + + $.post(event.target.action, { + folder_location: this.folders, + filename: filename, + new_filename: new_filename + }, (data) => { + if (data.success) { + this.showNotif({ + title: 'Success', + body: `Successfully Renamed "${filename}" to "${data.new_filename}"`, + type: 'success', + duration: 3 + }) + + this.updateItemName(this.selectedFile, filename, data.new_filename) + + if (this.selectedFileIs('folder')) { + this.updateDirsList() + } + } else { + this.showNotif({ + title: 'Error', + body: data.message, + type: 'danger' + }) + } + + this.toggleModal() + + }).fail(() => { + this.ajaxError() + }) + }, + MoveFileForm(event) { + if ($('#move_folder_dropdown').val() !== null) { + if (this.bulkItemsCount) { + this.move_file(this.bulkList, event.target.action) + setTimeout(() => { + $('#blk_slct').trigger('click') + }, 100) + } else { + this.move_file([this.selectedFile], event.target.action) + } + } + }, + DeleteFileForm(event) { + if (this.bulkItemsCount) { + this.delete_file(this.bulkList, event.target.action) + setTimeout(() => { + $('#blk_slct').trigger('click') + }, 100) + } else { + this.delete_file([this.selectedFile], event.target.action) + } + }, + + /* Ops */ + move_file(files, routeUrl) { + let destination = $('#move_folder_dropdown').val() + + $.post(routeUrl, { + folder_location: this.folders, + destination: destination, + moved_files: files + }, (res) => { + res.data.map((item) => { + if (item.success) { + this.showNotif({ + title: 'Success', + body: `Successfully moved "${item.name}" to "${destination}"`, + type: 'success', + duration: 3 + }) + + this.removeFromLists(item.name) + this.updateFolderCount(destination, 1, item.size) + + // update dirs list after move + if (item.type.includes('folder')) { + this.updateDirsList() + } + } else { + this.showNotif({ + title: 'Error', + body: item.message, + type: 'danger' + }) + } + }) + + // update folder count when folder is moved into another + files.map((e) => { + if (e.items && e.items > 0) { + this.updateFolderCount(destination, e.items) + } + }) + + this.toggleModal() + this.updateFoundCount(files.length) + this.selectFirst() + + }).fail(() => { + this.ajaxError() + }) + }, + delete_file(files, routeUrl) { + $.post(routeUrl, { + folder_location: this.folders, + deleted_files: files + }, (res) => { + res.data.map((item) => { + if (item.success) { + this.showNotif({ + title: 'Success', + body: `Successfully Deleted "${item.name}"`, + type: 'warning', + duration: 3 + }) + + this.removeFromLists(item.name) + } else { + this.showNotif({ + title: 'Error', + body: item.message, + type: 'danger' + }) + } + }) + + this.toggleModal() + this.updateFoundCount(files.length) + this.selectFirst() + + }).fail(() => { + this.ajaxError() + }) + }, + removeFromLists(name) { + if (this.filterdList.length) { + let list = this.filterdList + + list.map((e) => { + if (e.name.includes(name)) { + list.splice(list.indexOf(e), 1) + } + }) + } + + if (this.directories.length) { + let list = this.directories + + list.map((e) => { + if (e.includes(name)) { + list.splice(list.indexOf(e), 1) + } + }) + } + + this.files.items.map((e) => { + if (e.name.includes(name)) { + let list = this.files.items + + list.splice(list.indexOf(e), 1) + } + }) + + this.clearSelected() + }, + updateFolderCount(destination, count, weight = 0) { + if (destination !== '../') { + + if (destination.includes('/')) { + destination = destination.split('/').shift() + } + + if (this.filterdList.length) { + this.filterdList.map((e) => { + if (e.name.includes(destination)) { + e.items += parseInt(count) + e.size += parseInt(weight) + } + }) + } + + this.files.items.some((e) => { + if (e.name.includes(destination)) { + e.items += parseInt(count) + e.size += parseInt(weight) + } + }) + } + }, + updateItemName(item, oldName, newName) { + // update the main files list + let filesIndex = this.files.items[this.files.items.indexOf(item)] + filesIndex.name = newName + filesIndex.path = filesIndex.path.replace(oldName, newName) + + // if found in the filterd list, then update it aswell + if (this.filterdList.includes(item)) { + let filterIndex = this.filterdList[this.filterdList.indexOf(item)] + filterIndex.name = newName + filesIndex.path = filterIndex.path.replace(oldName, newName) + } + } + } +} diff --git a/src/resources/assets/js/components/bulma/mixins/methods/selected.js b/src/resources/assets/js/components/bulma/mixins/methods/selected.js new file mode 100644 index 0000000..f1e9940 --- /dev/null +++ b/src/resources/assets/js/components/bulma/mixins/methods/selected.js @@ -0,0 +1,64 @@ +export default { + methods: { + selectedFileIs(val) { + if (typeof this.selectedFile !== 'undefined') { + return this.fileTypeIs(this.selectedFile, val) + } + }, + setSelected(file) { + this.clearSelected() + $('div[data-folder="' + file.name + '"]').addClass('selected') + this.selectedFile = file + + if (this.isBulkSelecting()) { + this.pushtoBulkList(file) + } + }, + clearSelected() { + this.resetInput('selectedFile') + $('#files li .selected').removeClass('selected') + }, + selectFirst() { + this.$nextTick(() => { + let file = $('div[data-index="0"]') + if (file.length > 0) { + file.trigger('click') + } + }) + }, + openFolder(file) { + if (!this.isBulkSelecting()) { + if (!this.fileTypeIs(file, 'folder')) { + return false + } + + this.folders.push(file.name) + this.getFiles(this.folders) + } + + this.resetInput('currentFilterName') + }, + goToFolder(index) { + if (!this.isBulkSelecting()) { + this.noFiles('hide') + + this.folders = this.folders.splice(0, index) + this.getFiles(this.folders) + + this.resetInput('currentFilterName') + } + }, + scrollToFile(file) { + if (!file) { + file = $('div[data-index="0"]') + } + + $(file).trigger('click') + + $('#left').scrollTo($(file), 0, { + margin: true, + offset: -8 + }) + } + } +} diff --git a/src/resources/assets/js/components/bulma/mixins/methods/utils.js b/src/resources/assets/js/components/bulma/mixins/methods/utils.js new file mode 100644 index 0000000..39ea7a0 --- /dev/null +++ b/src/resources/assets/js/components/bulma/mixins/methods/utils.js @@ -0,0 +1,96 @@ +export default { + methods: { + isLastItem(item, list) { + return item == list[list.length - 1] + }, + lightBoxIsActive() { + return $('#img_modal').hasClass('is-active') + }, + showNotif(data) { + EventHub.fire('showNotif', { + title: data.title, + body: data.body, + type: data.type, + duration: data.duration !== undefined ? data.duration : null + }) + }, + checkForFolders() { + return $('#move_folder_dropdown').val() !== null + ? true + : false + }, + resetInput(input, val = undefined) { + this[input] = val + }, + + /* Resolve */ + getFileName(name) { + if (!this.hideExt) { + return name + } + + return name.replace(/(.[^.]*)$/, '') + }, + getFileSize(bytes) { + if (bytes === 0) { + return 'N/A' + } + + let k = 1000, + dm = 2, + sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'], + i = Math.floor(Math.log(bytes) / Math.log(k)) + + return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i] + }, + + /* Toggle */ + toggleInfo() { + $('#right').fadeToggle() + let span = $('.toggle').find('span').not('.icon') + span.text(span.text() == 'Close' ? 'Open' : 'Close') + $('.toggle').find('.fa').toggleClass('fa fa-angle-double-right').toggleClass('fa fa-angle-double-left') + }, + toggleModal(selector = null) { + if (!selector) { + EventHub.fire('modal-hide') + this.noScroll() + return $('.modal').removeClass('is-active') + } + + EventHub.fire('modal-show') + this.noScroll('add') + $(selector).addClass('is-active') + $(selector).find('input').focus() + }, + noScroll(s) { + if (s == 'add') { + return $('html').addClass('no-scroll') + } + + $('html').removeClass('no-scroll') + }, + noFiles(s) { + if (s == 'show') { + EventHub.fire('no-files-show') + return $('#no_files').fadeIn() + } + + EventHub.fire('no-files-hide') + $('#no_files').hide() + }, + loadingFiles(s) { + if (s == 'show') { + EventHub.fire('loading-files-show') + return $('#file_loader').show() + } + + EventHub.fire('loading-files-hide') + $('#file_loader').hide() + }, + ajaxError() { + EventHub.fire('ajax-error-show') + $('#ajax_error').show() + } + } +} diff --git a/src/resources/assets/js/components/bulma/mixins/watch.js b/src/resources/assets/js/components/bulma/mixins/watch.js new file mode 100644 index 0000000..4643b38 --- /dev/null +++ b/src/resources/assets/js/components/bulma/mixins/watch.js @@ -0,0 +1,73 @@ +export default { + watch: { + allFiles(val) { + if (val.length < 1) { + return this.noFiles('show') + } + + this.noFiles('hide') + }, + bulkList(val) { + if (val) { + // hide move button when all folders are selected + this.$nextTick(() => { + if (!this.checkForFolders()) { + $('#move').attr('disabled', true) + } + }) + } + + if (val == 0 && this.isBulkSelecting()) { + let toggle_text = $('#blk_slct_all').find('span').not('.icon') + $('#blk_slct_all').removeClass('is-warning') + $('#blk_slct_all').find('.fa').removeClass('fa-minus').addClass('fa-plus') + toggle_text.text('Select All') + } + }, + selectedFile(val) { + if (!val) { + $('#move').attr('disabled', true) + $('#rename').attr('disabled', true) + $('#delete').attr('disabled', true) + } else { + // hide move button when there is only one folder and its selected + this.$nextTick(() => { + if (!this.checkForFolders()) { + $('#move').attr('disabled', true) + } + }) + + $('#move').removeAttr('disabled') + $('#rename').removeAttr('disabled') + $('#delete').removeAttr('disabled') + } + }, + searchFor(val) { + if (!val) { + this.resetInput('searchItemsCount') + this.noFiles('hide') + } else { + this.updateSearchCount() + + // so we dont miss with the bulk selection list + if (!this.isBulkSelecting()) { + this.clearSelected() + } + } + + this.selectFirst() + }, + showBy(val) { + if (val) { + if (val == 'clear') { + this.resetInput('showBy') + } + + if (!this.isBulkSelecting()) { + this.selectFirst() + } + } + } + } + +} diff --git a/src/resources/assets/js/components/bulma/notifs.vue b/src/resources/assets/js/components/bulma/notifs.vue old mode 100755 new mode 100644 index 1e8709a..9907fa4 --- a/src/resources/assets/js/components/bulma/notifs.vue +++ b/src/resources/assets/js/components/bulma/notifs.vue @@ -183,7 +183,7 @@ export default { closeNotif(index) { this.notif_group[index].show = false - if (typeof this.notif_group[index].onClose != 'undefined' && typeof this.notif_group[index].onClose === 'function') { + if (typeof this.notif_group[index].onClose !== 'undefined' && typeof this.notif_group[index].onClose === 'function') { this.notif_group[index].onClose() } }, diff --git a/src/resources/assets/js/events.js b/src/resources/assets/js/events.js new file mode 100644 index 0000000..afe1ae3 --- /dev/null +++ b/src/resources/assets/js/events.js @@ -0,0 +1,41 @@ +// M O D A L // +EventHub.listen('modal-show', () => {}) +EventHub.listen('modal-hide', () => {}) + +// F I L E - L O A D I N G // +EventHub.listen('loading-files-show', () => { + bm(document.getElementById('file_loader_anim'), 'file_loader_anim') +}) + +EventHub.listen('loading-files-hide', () => { + bodymovin.destroy('file_loader_anim') +}) + +// N O - F I L E S // +EventHub.listen('no-files-show', () => { + bm(document.getElementById('no_files_anim'), 'no_files_anim') +}) + +EventHub.listen('no-files-hide', () => { + bodymovin.destroy('no_files_anim') +}) + +// A J A X - E R R O R // +EventHub.listen('ajax-error-show', () => { + bm(document.getElementById('ajax_error_anim'), 'ajax_error_anim') +}) + +/** + * body movin animation + * you can remove it / replace it, do what you want + */ +function bm(el, name) { + bodymovin.loadAnimation({ + container: el, + renderer: 'svg', + loop: true, + name: name, + autoplay: true, + path: el.getAttribute('data-json') + }) +} diff --git a/src/resources/assets/js/media.js b/src/resources/assets/js/media.js index fc5ad81..b684073 100644 --- a/src/resources/assets/js/media.js +++ b/src/resources/assets/js/media.js @@ -1,29 +1,11 @@ -$.ajaxSetup({ - cache: false, - headers: { - 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') - } -}) - /* Libs */ -window.Vue = require('vue') -window.EventHub = require('vuemit') window.keycode = require('keycode') window.dropzone = require('dropzone') Vue.use(require('vue-tippy')) Vue.use(require('vue2-filters')) -import VueLightbox from 'vue-lightbox' -Vue.component('Lightbox', VueLightbox) /* Components */ Vue.component('MediaManager', require('./components/' + process.env.MIX_MM_FRAMEWORK + '/media.vue')) -Vue.component('MyNotification', require('./components/' + process.env.MIX_MM_FRAMEWORK + '/notifs.vue')) /* Events */ -EventHub.listen('modal-show', () => { - // ... -}) - -EventHub.listen('modal-hide', () => { - // ... -}) +require('./events') diff --git a/src/resources/assets/sass/animated.scss b/src/resources/assets/sass/animated.scss new file mode 100644 index 0000000..5df77ca --- /dev/null +++ b/src/resources/assets/sass/animated.scss @@ -0,0 +1,35 @@ +.animated { + animation-duration: 600ms; + animation-fill-mode: both; + animation-timing-function: cubic-bezier(1, 0, 0, 1); +} + +@keyframes fadeInDown { + from { + opacity: 0; + transform: translate3d(0, -100%, 0); + } + + to { + opacity: 1; + transform: none; + } +} + +.fadeInDown { + animation-name: fadeInDown; +} + +@keyframes fadeIn { + from { + opacity: 0; + } + + to { + opacity: 1; + } +} + +.fadeIn { + animation-name: fadeIn; +} diff --git a/src/resources/assets/sass/bulma/media.scss b/src/resources/assets/sass/bulma/media.scss index 5624867..83bdfdb 100644 --- a/src/resources/assets/sass/bulma/media.scss +++ b/src/resources/assets/sass/bulma/media.scss @@ -1,4 +1,7 @@ +@import "../animated"; +@import "../progress"; @import "../shared-styles"; + $gray_7: #b5b5b5; $turquoise: #00d1b2; $green: #23d160; @@ -46,6 +49,10 @@ table, .table { margin-bottom: 0; + td { + padding: 0; + } + td, th { vertical-align: middle; @@ -62,10 +69,15 @@ table, } .modal.is-active { - padding-top: 5%; + padding-top: 3%; align-items: start; } +#img_modal { + padding: 0; + align-items: center; +} + .modal-card-foot { background-color: white; justify-content: flex-end; diff --git a/src/resources/assets/sass/progress.scss b/src/resources/assets/sass/progress.scss new file mode 100644 index 0000000..c9205f3 --- /dev/null +++ b/src/resources/assets/sass/progress.scss @@ -0,0 +1,75 @@ +.progress { + height: 1rem; + margin-bottom: 20px; + overflow: hidden; + background-color: #f5f5f5; + border-radius: 4px; + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); +} + +.progress-bar { + width: 0; + height: 100%; + float: left; + font-size: 12px; + line-height: 20px; + text-align: center; + color: #fff; + background-color: #337ab7; + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + transition: width 0.6s ease; +} + +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + + to { + background-position: 0 0; + } +} + +.progress-striped .progress-bar, +.progress-bar-striped { + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: 40px 40px; +} + +.progress.active .progress-bar, +.progress-bar.active { + -webkit-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} + +.progress-bar-success { + background-color: #5cb85c; +} + +.progress-striped .progress-bar-success { + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-bar-info { + background-color: #5bc0de; +} + +.progress-striped .progress-bar-info { + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-bar-warning { + background-color: #f0ad4e; +} + +.progress-striped .progress-bar-warning { + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-bar-danger { + background-color: #d9534f; +} + +.progress-striped .progress-bar-danger { + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} diff --git a/src/resources/assets/sass/shared-styles.scss b/src/resources/assets/sass/shared-styles.scss index ab6658a..997ad17 100644 --- a/src/resources/assets/sass/shared-styles.scss +++ b/src/resources/assets/sass/shared-styles.scss @@ -48,10 +48,6 @@ $blue_2: #276cda; border-radius: 100vw; } -.progress { - height: 1rem; -} - #uploadPreview { display: none; } @@ -250,7 +246,7 @@ $blue_2: #276cda; @extend .selected; } -.image { +.img { width: 100%; height: 100%; background-repeat: no-repeat; @@ -260,7 +256,8 @@ $blue_2: #276cda; // loaders #file_loader, -#no_files { +#no_files, +#ajax_error { position: absolute; top: 0; bottom: 0; @@ -272,6 +269,14 @@ $blue_2: #276cda; justify-content: center; } +#ajax_error { + flex-direction: column; + + h3 { + margin-top: 1rem; + } +} + #no_files { h3 { margin-left: 3rem; @@ -282,7 +287,8 @@ $blue_2: #276cda; width: 15vw; } -#no_files_anim { +#no_files_anim, +#ajax_error_anim { width: 5vw; } // end loaders @@ -361,8 +367,7 @@ $blue_2: #276cda; } } -.confirm_delete, -.confirm_delete_icon { +.confirm_delete_text * { color: $blue; font-weight: 500; } @@ -371,6 +376,10 @@ $blue_2: #276cda; margin-top: 15px; } +.file_size { + font-weight: bold; +} + // util .p-l-0 { padding-left: 0 !important; @@ -384,24 +393,6 @@ $blue_2: #276cda; margin-left: 50px !important; } -// Lightbox -.lb-outerContainer { - background-color: transparent !important; - - .lb-container { - padding: 0; - - .lb-image { - border-radius: 4px; - border: none; - } - } -} - -.lb-dataContainer { - display: none; -} - // notification .notif-container { padding: 0 0 4rem; @@ -413,43 +404,11 @@ $blue_2: #276cda; overflow: scroll; } -// animated.css -.animated { - animation-duration: 600ms; - animation-fill-mode: both; - animation-timing-function: cubic-bezier(1, 0, 0, 1); -} - -@keyframes fadeInDown { - from { - opacity: 0; - transform: translate3d(0, -100%, 0); - } - - to { - opacity: 1; - transform: none; - } -} - -.fadeInDown { - animation-name: fadeInDown; -} - -@keyframes fadeIn { - from { - opacity: 0; - } - - to { - opacity: 1; - } -} - -.fadeIn { - animation-name: fadeIn; -} - +// for modal .no-scroll { overflow: hidden; } + +.pointer { + cursor: pointer; +} diff --git a/src/resources/lang/en/messages.php b/src/resources/lang/en/messages.php index 5553156..45c11f3 100644 --- a/src/resources/lang/en/messages.php +++ b/src/resources/lang/en/messages.php @@ -1,37 +1,38 @@ 'Add Folder', - 'add_new_folder' => 'Add New Folder', - 'are_you_sure' => 'Are you sure', - 'are_you_sure_delete' => 'Are you sure you want to delete', - 'bulk_select' => 'Bulk Select', - 'cancel' => 'Cancel', - 'create_new_folder' => 'Create New Folder', - 'delete' => 'Delete', - 'delete_confirm' => 'Yes, Delete it!', - 'delete_folder_question' => 'Deleting a folder will remove all files and folders contained inside', - 'destination_folder' => 'Destination Folder', - 'drag_drop_info' => 'Drag and drop files or click below to upload', - 'error_already_exists' => 'Sorry there is already a file/folder with that existing name in that folder.', - 'error_creating_dir' => 'Sorry something seems to have gone wrong with creating the directory, please check your permissions', - 'error_deleting_file' => 'Sorry something seems to have gone wrong deleting this file, please check your permissions', - 'error_deleting_folder' => 'Sorry something seems to have gone wrong when deleting this folder, please check your permissions', - 'error_may_exist' => 'File or Folder may already exist with that name. Please choose another name or delete the other file.', - 'error_moving' => 'Sorry there seems to be a problem moving that file/folder, please make sure you have the correct permissions.', - 'folder_exists_already' => 'Sorry that folder already exists, please delete that folder if you wish to re-create it', - 'library' => 'Media Library', - 'loading' => 'LOADING YOUR MEDIA FILES', - 'move' => 'Move', - 'move_file_folder' => 'Move File/Folder', - 'new_file_folder' => 'New File/Folder Name', - 'new_folder_name' => 'New Folder Name', - 'no_files_in_folder' => 'No files in this folder.', - 'nothing_selected' => 'No file or folder selected', - 'rename' => 'Rename', - 'rename_file_folder' => 'Rename File/Folder', - 'too_many_files' => 'Too Many Files...', - 'url' => 'URL', - 'upload' => 'Upload', - 'not_allowed_file_ext' => 'Files Of Type ":attr" Are Not Allowed', + 'add_folder' => 'Add Folder', + 'add_new_folder' => 'Add New Folder', + 'are_you_sure' => 'Are you sure', + 'are_you_sure_delete' => 'Are you sure you want to delete', + 'bulk_select' => 'Bulk Select', + 'cancel' => 'Cancel', + 'create_new_folder' => 'Create New Folder', + 'delete' => 'Delete', + 'delete_confirm' => 'Yes, Delete it!', + 'delete_folder_question' => 'Deleting a folder will remove all files and folders contained inside', + 'destination_folder' => 'Destination Folder', + 'drag_drop_info' => 'Drag and drop files or click below to upload', + 'error_already_exists' => 'Sorry there is already a file/folder with that existing name in that folder.', + 'error_creating_dir' => 'Sorry something seems to have gone wrong with creating the directory, please check your permissions', + 'error_deleting_file' => 'Sorry something seems to have gone wrong deleting this file, please check your permissions', + 'error_deleting_folder' => 'Sorry something seems to have gone wrong when deleting this folder, please check your permissions', + 'error_may_exist' => 'File or Folder may already exist with that name. Please choose another name or delete the other file.', + 'error_moving' => 'Sorry there seems to be a problem moving that file/folder, please make sure you have the correct permissions.', + 'folder_exists_already' => 'Sorry that folder already exists, please delete that folder if you wish to re-create it', + 'library' => 'Media Library', + 'loading' => 'LOADING YOUR MEDIA FILES', + 'ajax_error' => 'Oh NO! Something Went Wrong', + 'move' => 'Move', + 'move_file_folder' => 'Move File/Folder', + 'new_file_folder' => 'New File/Folder Name', + 'new_folder_name' => 'New Folder Name', + 'no_files_in_folder' => 'No files in this folder.', + 'nothing_selected' => 'No file or folder selected', + 'rename' => 'Rename', + 'rename_file_folder' => 'Rename File/Folder', + 'too_many_files' => 'Too Many Files...', + 'url' => 'URL', + 'upload' => 'Upload', + 'not_allowed_file_ext' => 'Files Of Type ":attr" Are Not Allowed', ]; diff --git a/src/resources/lang/fr/messages.php b/src/resources/lang/fr/messages.php index ca73bae..3bff77c 100644 --- a/src/resources/lang/fr/messages.php +++ b/src/resources/lang/fr/messages.php @@ -1,37 +1,38 @@ 'Ajouter le dossier', - 'add_new_folder' => 'Ajouter un nouveau dossier', - 'are_you_sure' => 'Êtes-vous sûre', - 'are_you_sure_delete' => 'Êtes-vous sûre de vouloir supprimer', - 'bulk_select' => 'Sélection en vrac', - 'cancel' => 'Annuler', - 'create_new_folder' => 'Créer un nouveau dossier', - 'delete' => 'Supprimer', - 'delete_confirm' => 'Oui, Supprimez-le', - 'delete_folder_question' => 'La suppression d\'un dossier supprimera tous les fichiers et dossiers contenus à l\'intérieur', - 'destination_folder' => 'Dossier de destination', - 'drag_drop_info' => 'Faites glisser et déposez des fichiers ou cliquez ci-dessous pour télécharger', - 'error_already_exists' => 'Désolé, il existe déjà un fichier / dossier avec ce nom existant dans ce dossier.', - 'error_creating_dir' => 'Désolé, quelque chose semble avoir mal tourné avec la création du répertoire. Veuillez vérifier vos autorisations', - 'error_deleting_file' => 'Désolé, quelque chose semble avoir mal retourné ce fichier. Veuillez vérifiez vos autorisations', - 'error_deleting_folder' => 'Désolé, quelque chose semble avoir mal tourné lors de la suppression de ce dossier. Veuillez vérifiez vos autorisations', - 'error_may_exist' => 'Le fichier ou le dossier semble déjà exister avec ce nom. Choisissez un autre nom ou supprimez l\'autre fichier.', - 'error_moving' => 'Désolé, il semble y avoir un problème que le déplacement fichier / dossier, assurez-vous que vous disposez des autorisations appropriées.', - 'folder_exists_already' => 'Désolé que ce dossier existe déjà, supprimez ce dossier si vous souhaitez le recréer', - 'library' => 'Médiathèque', - 'loading' => 'CHARGEMENT DE VOS FICHIERS MULTIMÉDIA', - 'move' => 'Déplacer', - 'move_file_folder' => 'Déplacer le fichier/dossier', - 'new_file_folder' => 'Nouveau nom de fichier/dossier', - 'new_folder_name' => 'Nom du nouveau dossier', - 'no_files_in_folder' => 'Pas de fichiers dans ce dossier.', - 'nothing_selected' => 'Aucun fichier ou dossier sélectionné', - 'rename' => 'Renommer', - 'rename_file_folder' => 'Renommer Fichier/Dossier', - 'too_many_files' => 'Trop de fichiers ...', - 'url' => 'URL', - 'upload' => 'Téléverser', - 'not_allowed_file_ext' => 'Les fichiers du type ":attr" ne sont pas autorisés', + 'add_folder' => 'Ajouter le dossier', + 'add_new_folder' => 'Ajouter un nouveau dossier', + 'are_you_sure' => 'Êtes-vous sûre', + 'are_you_sure_delete' => 'Êtes-vous sûre de vouloir supprimer', + 'bulk_select' => 'Sélection en vrac', + 'cancel' => 'Annuler', + 'create_new_folder' => 'Créer un nouveau dossier', + 'delete' => 'Supprimer', + 'delete_confirm' => 'Oui, Supprimez-le', + 'delete_folder_question' => 'La suppression d\'un dossier supprimera tous les fichiers et dossiers contenus à l\'intérieur', + 'destination_folder' => 'Dossier de destination', + 'drag_drop_info' => 'Faites glisser et déposez des fichiers ou cliquez ci-dessous pour télécharger', + 'error_already_exists' => 'Désolé, il existe déjà un fichier / dossier avec ce nom existant dans ce dossier.', + 'error_creating_dir' => 'Désolé, quelque chose semble avoir mal tourné avec la création du répertoire. Veuillez vérifier vos autorisations', + 'error_deleting_file' => 'Désolé, quelque chose semble avoir mal retourné ce fichier. Veuillez vérifiez vos autorisations', + 'error_deleting_folder' => 'Désolé, quelque chose semble avoir mal tourné lors de la suppression de ce dossier. Veuillez vérifiez vos autorisations', + 'error_may_exist' => 'Le fichier ou le dossier semble déjà exister avec ce nom. Choisissez un autre nom ou supprimez l\'autre fichier.', + 'error_moving' => 'Désolé, il semble y avoir un problème que le déplacement fichier / dossier, assurez-vous que vous disposez des autorisations appropriées.', + 'folder_exists_already' => 'Désolé que ce dossier existe déjà, supprimez ce dossier si vous souhaitez le recréer', + 'library' => 'Médiathèque', + 'loading' => 'CHARGEMENT DE VOS FICHIERS MULTIMÉDIA', + 'ajax_error' => 'Oh NO! Something Went Wrong', + 'move' => 'Déplacer', + 'move_file_folder' => 'Déplacer le fichier/dossier', + 'new_file_folder' => 'Nouveau nom de fichier/dossier', + 'new_folder_name' => 'Nom du nouveau dossier', + 'no_files_in_folder' => 'Pas de fichiers dans ce dossier.', + 'nothing_selected' => 'Aucun fichier ou dossier sélectionné', + 'rename' => 'Renommer', + 'rename_file_folder' => 'Renommer Fichier/Dossier', + 'too_many_files' => 'Trop de fichiers ...', + 'url' => 'URL', + 'upload' => 'Téléverser', + 'not_allowed_file_ext' => 'Les fichiers du type ":attr" ne sont pas autorisés', ]; diff --git a/src/resources/views/bulma/media.blade.php b/src/resources/views/bulma/media.blade.php index f4fff3e..7bafce7 100755 --- a/src/resources/views/bulma/media.blade.php +++ b/src/resources/views/bulma/media.blade.php @@ -8,9 +8,6 @@ {{-- Main styles --}} - - {{-- ziggy --}} - @routes