[WIP] Refactor project

This commit is contained in:
Ludovic CANDELLIER
2021-05-21 00:21:05 +02:00
parent 4ce0fa942d
commit b50f50ea62
347 changed files with 14104 additions and 1608 deletions

View File

@@ -0,0 +1,11 @@
<div class="p-4">
<div class="alert alert-danger" style="display:flex;align-items:center">
<span class="fa fa-exclamation-triangle fa-3x" style="margin-right: 10px"></span>
<span>
{{ __('boilerplate-media-manager::error.notfound') }}<br />
<a href="{{ route('mediamanager.index').($query !== '' ? '?'.$query : '') }}" style="color: #FFF">
{{ __('boilerplate-media-manager::error.back') }}
</a>
</span>
</div>
</div>

View File

@@ -0,0 +1,43 @@
@include('boilerplate-media-manager::scripts')
<!DOCTYPE html>
<html lang="{{ App::getLocale() }}">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="robots" content="noindex, nofollow">
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>{{ config('app.name') }}</title>
@stack('css')
<link rel="stylesheet" href="{{ mix('/plugins/fontawesome/fontawesome.min.css', '/assets/vendor/boilerplate') }}">
<link rel="stylesheet" href="{{ mix('/adminlte.min.css', '/assets/vendor/boilerplate') }}">
<link rel="stylesheet" href="{{ mix('/mediamanager.min.css', '/assets/vendor/boilerplate-media-manager') }}">
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Source+Sans+Pro:ital,wght@0,300;0,400;0,700;1,400&display=swap" rel="stylesheet">
</head>
<body class="sidebar-mini">
<div id="disable"></div>
<div class="content-wrapper ml-0">
<div id="loading">
<div><span class="fa fa-4x fa-sync-alt fa-spin"></span></div>
</div>
<div id="media-content" data-mce="1" data-display="list" data-type="{{ $type }}"
data-path="{{ (string) $path }}" data-field="{{ $field }}" data-return="{{ $return_type }}"
data-selected="{{ $selected }}"></div>
</div>
<script src="{{ mix('/bootstrap.min.js', '/assets/vendor/boilerplate') }}"></script>
<script src="{{ mix('/admin-lte.min.js', '/assets/vendor/boilerplate') }}"></script>
<script src="{{ mix('/boilerplate.min.js', '/assets/vendor/boilerplate') }}"></script>
<script>
$.ajaxSetup({headers: {'X-CSRF-TOKEN': '{{ csrf_token() }}'}});
bootbox.setLocale('{{ App::getLocale() }}');
var session = {
keepalive: "{{ route('boilerplate.keepalive', null, false) }}",
expire: {{ time() + config('session.lifetime') * 60 }},
lifetime: {{ config('session.lifetime') * 60 }},
id: "{{ session()->getId() }}"
}
</script>
@stack('js')
</body>

View File

@@ -0,0 +1,19 @@
@extends('boilerplate::layout.index', [
'title' => __('boilerplate-media-manager::menu.medialibrary'),
'subtitle' => __('boilerplate-media-manager::menu.medialist'),
'breadcrumb' => [
__('boilerplate-media-manager::menu.medialibrary')
]
])
@section('content')
<div id="disable"></div>
<div id="loading"><div><span class="fa fa-4x fa-sync-alt fa-spin"></span></div></div>
<div id="media-content" data-mce="0" data-display="list" data-type="{{ $type }}" data-path="/{{ (string) $path }}"></div>
@endsection
@push('css')
<link rel="stylesheet" href="{{ mix('/mediamanager.min.css', '/assets/vendor/boilerplate-media-manager') }}">
@endpush
@include('boilerplate-media-manager::scripts')

View File

@@ -0,0 +1,79 @@
<table class="table table-striped table-sm table-hover" id="media-list" data-path="{{ $content->path() }}">
<thead>
<tr>
<th style="width:35px">
<div class="icheck-primary">
<input type="checkbox" class="check-all" id="check-all">
<label for="check-all"></label>
</div>
</th>
<th>{{ __('boilerplate-media-manager::list.name') }}</th>
<th style="width: 100px">{{ __('boilerplate-media-manager::list.weight') }}</th>
<th style="width: 80px">{{ __('boilerplate-media-manager::list.type') }}</th>
<th style="width: 160px">{{ __('boilerplate-media-manager::list.date') }}</th>
<th style="width: 150px"></th>
</tr>
</thead>
<tbody>
@if($parent)
<tr class="level-up">
<td></td>
<td>
<a href="{{ $parent['link'] }}" class="link-folder">
<span class="fa fa-level-up-alt fa-lg fa-fw media-icon fa-flip-horizontal" ></span> ..
</a>
</td>
<td>-</td>
<td>{{ __('boilerplate-media-manager::types.folder') }}</td>
<td>{{ $parent['time'] }}</td>
<td></td>
</tr>
@endif
@foreach($list as $k => $item)
<tr class="media" data-filename="{{ $item['name'] }}" data-url="{{ $item['url'] }}">
<td>
<div class="icheck-primary">
<input type="checkbox" name="check[]" value="{{ $item['name'] }}" id="item_{{ $k }}">
<label for="item_{{ $k }}"></label>
</div>
</td>
<td>
@if($item['isDir'])
<a href="{{ $item['link'] }}" class="link-folder">
<span class="far fa-folder fa-lg fa-fw media-icon"></span>&nbsp;{{ $item['name'] }}
</a>
@else
<a href="{{ $item['url'] }}" class="link-media" data-filename="{{ $item['name'] }}">
@if($item['type'] === 'image')
<img class="lazy mr-2" data-src="{{ $item['thumb'] }}" alt="{{ $item['name'] }}" style="max-width:26px;max-height:26px"> {{ $item['name'] }}
@else
<span class="far fa-{{ $item['icon'] }} fa-lg fa-fw media-icon"></span>&nbsp;{{ $item['name'] }}
@endif
</a>
@endif
</td>
<td>{{ $item['size'] }}</td>
<td>{{ __('boilerplate-media-manager::types.'.$item['type']) }}</td>
<td>{{ $item['time'] }}</td>
<td class="visible-on-hover">
<div class="btn-group">
@if(!$item['isDir'])
<a href="{{ $item['url'] }}" class="btn btn-sm btn-default btn-view">
<span class="fa fa-eye"></span>
</a>
<a href="{{ $item['url'] }}" class="btn btn-sm btn-default" download="{{ $item['url'] }}" target="_blank">
<span class="fa fa-download"></span>
</a>
@endif
<a href="#" class="btn btn-sm btn-default btn-rename" data-filename="{{ $item['name'] }}">
<span class="fa fa-pencil-alt"></span>
</a>
<a href="#" class="btn btn-sm btn-default btn-delete" data-filename="{{ $item['name'] }}">
<span class="fa fa-trash"></span>
</a>
</div>
</td>
</tr>
@endforeach
</tbody>
</table>

View File

@@ -0,0 +1,57 @@
<div id="media-list" class="media-tiles" data-path="{{ $content->path() }}">
@if($parent)
<div class="tile">
<div class="tile-icon">
<a href="{{ $parent['link'] }}" class="link-folder">
<span class="fa fa-level-up-alt fa-4x fa-fw media-icon fa-flip-horizontal" ></span>
</a>
</div>
<div class="tile-label">
<label class="text-center">..</label>
</div>
</div>
@endif
@foreach($list as $k => $item)
<div class="tile media" data-filename="{{ $item['name'] }}" data-url="{{ $item['url'] }}">
<div class="tile-icon">
@if($item['isDir'])
<a href="{{ $item['link'] }}" class="link-folder">
<span class="far fa-folder }} fa-4x fa-fw media-icon"></span>
</a>
@else
<a href="{{ $item['url'] }}" class="link-media" data-filename="{{ $item['name'] }}">
@if($item['type'] === 'image')
<img class="lazy" data-src="{{ $item['thumb'] }}" alt="{{ $item['name'] }}">
@else
<span class="fa fa-{{ $item['icon'] }} fa-5x fa-fw media-icon"></span>
@endif
</a>
@endif
</div>
<div class="tile-menu">
<div class="btn-group">
@if(!$item['isDir'])
<a href="{{ $item['url'] }}" class="btn btn-sm btn-default btn-view">
<span class="fa fa-eye"></span>
</a>
<a href="{{ $item['url'] }}" class="btn btn-sm btn-default" download="{{ $item['url'] }}" target="_blank">
<span class="fa fa-download"></span>
</a>
@endif
<a href="#" class="btn btn-sm btn-default btn-rename" data-filename="{{ $item['name'] }}">
<span class="fa fa-pencil-alt"></span>
</a>
<a href="#" class="btn btn-sm btn-default btn-delete" data-filename="{{ $item['name'] }}">
<span class="fa fa-trash"></span>
</a>
</div>
</div>
<div class="tile-label">
<div class="icheck-primary d-inline">
<input type="checkbox" name="check[]" value="{{ $item['name'] }}" id="item_{{ $k }}">
<label for="item_{{ $k }}">{{ $item['name'] }}</label>
</div>
</div>
</div>
@endforeach
</div>

View File

@@ -0,0 +1,64 @@
<div class="card card-outline card-info">
<div id="btn-paste-group" style="display: none">
<div class="files-selected">
<span id="nb-files-selected"></span> {{ __('boilerplate-media-manager::message.paste.files') }}
</div>
<div class="btn-group">
<button class="btn btn-primary btn-paste" disabled>{{ __('boilerplate-media-manager::menu.paste') }}</button>
<button class="btn btn-default btn-paste-cancel">{{ __('boilerplate-media-manager::menu.cancel') }}</button>
</div>
</div>
<div class="card-header border-bottom-0">
<div class="btn-group">
<button href="#" class="btn btn-default delete-checked" disabled>
<span class="fa fa-trash"></span>
</button>
<button href="#" class="btn btn-default copy-checked" disabled>
<span class="fa fa-clipboard"></span>
</button>
</div>
<span href="#" class="btn btn-default fileinput-button">
<i class="fa fa-upload"></i>
<span>{{ __('boilerplate-media-manager::menu.upload') }}</span>
<input id="fileupload" type="file" name="file" multiple>
</span>
<a href="#" class="btn btn-default add-folder">
<span class="fa fa-folder"></span> {{ __('boilerplate-media-manager::menu.newFolder') }}
</a>
<div class="btn-group float-right">
<a href="#" class="btn btn-{{ $display === 'list' ? 'secondary' : 'default' }} btn-toggle-display" data-display="list">
<span class="fa fa-th-list"></span>
</a>
<a href="#" class="btn btn-{{ $display === 'tiles' ? 'secondary' : 'default' }} btn-toggle-display" data-display="tiles">
<span class="fa fa-th"></span>
</a>
</div>
<div class="btn-group float-right mr-2">
<a href="#" class="btn btn-default btn-refresh">
<span class="fa fa-sync-alt"></span>
</a>
</div>
</div>
<div class="card-body pt-0">
<ol id="media-breadcrumb" class="breadcrumb mb-3 py-2">
<li><a href="{{ route('mediamanager.index', [], false) }}"><i class="fa fa-home"></i></a></li>
@foreach($breadcrumb->items() as $dir)
<li><a href="{{ route('mediamanager.index', ['path' => $dir['path']], false) }}">{{ $dir['name'] }}</a></li>
@endforeach
</ol>
<div id="progress" class="progress mb-3" style="display: none">
<div class="progress-bar"></div>
</div>
@if(empty($list) && empty($parent))
<div class="alert alert-info">
{{ __('boilerplate-media-manager::list.nocontent') }}
</div>
@else
@if($display === 'list')
@include('boilerplate-media-manager::list-table')
@else
@include('boilerplate-media-manager::list-tiles')
@endif
@endif
</div>
</div>

View File

@@ -0,0 +1,54 @@
@push('js')
<script>
var tinyMediaManager = {
image_advtab: true,
images_upload_handler: function (blobInfo, success, failure) {
var formData = new FormData();
formData.append('file', blobInfo.blob(), blobInfo.filename());
$.ajax({
url: '{{ route('mediamanager.ajax.mce-upload') }}',
type: 'post',
data: formData,
processData: false,
contentType: false,
success: function(json){
if (!json || typeof json.location != 'string') {
failure('Invalid JSON');
return;
}
success(json.location);
}
});
},
file_picker_callback: function (callback, value, meta) {
tinymce.activeEditor.windowManager.openUrl({
url: '{{ route('mediamanager.index', [], false) }}?mce=1&type=' + meta.filetype + '&selected=' + value,
title: 'File Manager',
width: Math.round(window.innerWidth * 0.8),
height: Math.round(window.innerHeight * 0.8),
onMessage: function (instance, data) {
if (data.mceAction === 'insertMedia') {
if (meta.filetype === 'image') {
callback(data.url, {alt: data.name});
}
if (meta.filetype === 'file') {
callback(data.url, {text: data.name});
}
if (meta.filetype === 'media') {
callback(data.url);
}
}
instance.close();
}
});
return false;
}
};
tinymce.defaultSettings = $.extend({}, tinymce.defaultSettings, tinyMediaManager);
</script>
@endpush

View File

@@ -0,0 +1,5 @@
@if(!defined('LOAD_TINYMCE_MEDIA'))
@include('boilerplate::load.tinymce')
@include('boilerplate-media-manager::load.mceextend')
@php(define('LOAD_TINYMCE_MEDIA', true))
@endif

View File

@@ -0,0 +1,27 @@
@push('js')
<script>
var clipboard = {path: '', files: []};
var locales = {
deleteConfirm: "{{ __('boilerplate-media-manager::message.delete.confirm') }}",
deleteSuccess: "{{ __('boilerplate-media-manager::message.delete.success') }}",
folderName: "{{ __('boilerplate-media-manager::message.folder.name') }}",
folderSuccess: "{{ __('boilerplate-media-manager::message.folder.success') }}",
renameTitle: "{{ __('boilerplate-media-manager::message.rename.title') }}",
renameSuccess: "{{ __('boilerplate-media-manager::message.rename.success') }}",
uploadSuccess: "{{ __('boilerplate-media-manager::message.upload.success') }}",
pasteSuccess: "{{ __('boilerplate-media-manager::message.paste.success') }}",
};
var routes = {
ajaxList: "{{ route('mediamanager.ajax.list', [], false) }}",
ajaxDelete: "{{ route('mediamanager.ajax.delete', [], false) }}",
ajaxUpload: "{{ route('mediamanager.ajax.upload', [], false) }}",
ajaxPaste: "{{ route('mediamanager.ajax.paste', [], false) }}",
newFolder: "{{ route('mediamanager.ajax.new-folder', [], false) }}",
rename: "{{ route('mediamanager.ajax.rename', [], false) }}",
}
</script>
<script src="{{ mix('/vendor/blueimp-file-upload/jquery.fileupload.min.js', '/assets/vendor/boilerplate-media-manager') }}"></script>
<script src="{{ mix('/vendor/jquery-lazy/jquery.lazy.plugins.js', '/assets/vendor/boilerplate-media-manager') }}"></script>
<script src="{{ mix('/mediamanager.min.js', '/assets/vendor/boilerplate-media-manager') }}"></script>
@endpush

View File

@@ -0,0 +1,35 @@
@php($id = uniqid())
<div class="form-group">
@if(!empty($label))
{{ Form::label($name ?? 'file', $label) }}
@endif
<div class="input-group">
<div class="input-group-prepend">
<button type="button" class="btn-select-file btn btn-secondary" data-field="{{ $id }}" data-src="{!! route('mediamanager.index', ['mce' => true, 'type' => $type ?? 'all', 'return_type' => 'file', 'field' => $id], false) !!}">
<i class="far fa-folder-open"></i>
</button>
</div>
<input type="text" class="form-control" data-id="text-{{ $id }}" value="{{ preg_replace('/.*\/(.*)\?.*$/', '$1', $value ?? '') }}" placeholder="{{ __('boilerplate-media-manager::select.no_file_selected') }}" style="background: #FFF" disabled>
<button class="btn {{ $value ? '' : 'd-none' }}" id="clear-{{ $id }}" style="position:absolute;right:0"><span class="fa fa-times"></span></button>
</div>
<input type="hidden" name="{{ $name ?? 'file' }}" value="{{ $value ?? '' }}" data-id="{{ $id }}"/>
{!! $errors->first( $name ?? 'file' ,'<div class="error-bubble"><div>:message</div></div>') !!}
</div>
@include('boilerplate-media-manager::select.scripts')
<script>
document.addEventListener("DOMContentLoaded", function() {
$('input[type="hidden"][data-id="{{ $id }}"]').on('change', function() {
$('#clear-{{ $id }}').addClass('d-none')
$('input[type="text"][data-id="text-{{ $id }}"]').val('')
if($(this).val() !== '') {
$('#clear-{{ $id }}').removeClass('d-none')
$('input[type="text"][data-id="text-{{ $id }}"]').val($(this).val().replace(/.*\/(.*)\?.*$/, '$1'))
}
})
$('#clear-{{ $id }}').on('click', function(e) {
e.preventDefault()
$('input[type="hidden"][data-id="{{ $id }}"]').val('').trigger('change')
})
})
</script>

View File

@@ -0,0 +1,19 @@
@php($id = uniqid())
<div class="select-image-wrapper {{ empty($value) ? '' : 'editable' }}" style="width:{{ $width ?? 300 }}px;height:{{ $height ?? 200 }}px">
<button type="button" style="max-width:{{ $width ?? 300 }}px;height:{{ $height ?? 200 }}px" class="btn-select-image" data-field="{{ $id }}"
data-src="{!! route('mediamanager.index', ['mce' => true, 'type' => 'image', 'return_type' => 'image', 'field' => $id], false) !!}">
@empty($value)
<span class="fa fa-image fa-3x"></span>
@else
<img src="{{ $value }}" />
@endempty
</button>
<div class="select-image-menu">
<button class="btn select-image-view"><span class="fa fa-eye"></span></button>
<button class="btn select-image-edit"><span class="fa fa-pencil"></span></button>
<button class="btn select-image-delete"><span class="fa fa-times"></span></button>
</div>
<input type="hidden" name="{{ $name ?? 'image' }}" value="{{ $value ?? '' }}" data-id="{{ $id }}"/>
</div>
{!! $errors->first( $name ?? 'image' ,'<div class="error-bubble"><div>:message</div></div>') !!}
@include('boilerplate-media-manager::select.scripts')

View File

@@ -0,0 +1,14 @@
@if(!defined('MEDIA_SELECT_SCRIPTS'))
@push('js')
<script>
var selectMediaLocales = {
confirm: "{{ __('boilerplate-media-manager::message.deletemedia') }}"
};
</script>
<script src="{{ mix('/select-media.min.js', '/assets/vendor/boilerplate-media-manager') }}"></script>
@endpush
@push('css')
<link rel="stylesheet" href="{{ mix('/select-media.min.css', '/assets/vendor/boilerplate-media-manager') }}">
@endpush
@php(define('MEDIA_SELECT_SCRIPTS', true))
@endif