mirror of
https://github.com/getgrav/grav-plugin-admin.git
synced 2025-11-01 19:06:16 +01:00
Added support for root selection in parents field
This commit is contained in:
@@ -1435,7 +1435,7 @@ class AdminController extends AdminBaseController
|
|||||||
protected function getFolderListing($data)
|
protected function getFolderListing($data)
|
||||||
{
|
{
|
||||||
// Valid types are dir|file|link
|
// Valid types are dir|file|link
|
||||||
$default_filters = ['type'=> ['dir','file'], 'name' => null, 'extension' => null];
|
$default_filters = ['type'=> ['root', 'dir', 'file'], 'name' => null, 'extension' => null];
|
||||||
|
|
||||||
|
|
||||||
$page_instances = Grav::instance()['pages']->instances();
|
$page_instances = Grav::instance()['pages']->instances();
|
||||||
@@ -1446,6 +1446,7 @@ class AdminController extends AdminBaseController
|
|||||||
$filters = isset($data['filters']) ? $default_filters + json_decode($data['filters']) : $default_filters;
|
$filters = isset($data['filters']) ? $default_filters + json_decode($data['filters']) : $default_filters;
|
||||||
$sortby = $data['sortby'] ?? 'filename';
|
$sortby = $data['sortby'] ?? 'filename';
|
||||||
$order = $data['order'] ?? SORT_ASC;
|
$order = $data['order'] ?? SORT_ASC;
|
||||||
|
$initial = $data['initial'] ?? null;
|
||||||
$filter_type = (array) $filters['type'];
|
$filter_type = (array) $filters['type'];
|
||||||
|
|
||||||
$status = 'error';
|
$status = 'error';
|
||||||
@@ -1493,24 +1494,42 @@ class AdminController extends AdminBaseController
|
|||||||
$status = 'success';
|
$status = 'success';
|
||||||
$msg = 'PLUGIN_ADMIN.PAGE_ROUTE_FOUND';
|
$msg = 'PLUGIN_ADMIN.PAGE_ROUTE_FOUND';
|
||||||
foreach (new \DirectoryIterator($path) as $fileInfo) {
|
foreach (new \DirectoryIterator($path) as $fileInfo) {
|
||||||
if ($fileInfo->isDot() || Utils::startsWith($fileInfo->getFilename(), '.')) {
|
$fileName = $fileInfo->getFilename();
|
||||||
|
if (($fileInfo->isDot() && $fileName !== '.' && $initial) || (Utils::startsWith($fileName, '.') && strlen($fileName) > 1)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
$file_page = $page_instances[$fileInfo->getPathname()] ?? null;
|
if ($fileInfo->isDot()) {
|
||||||
$file_path = Utils::replaceFirstOccurrence(GRAV_ROOT, '', $fileInfo->getPathname());
|
if (!$initial) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
$type = $fileInfo->getType();
|
$payload = [
|
||||||
$payload = [
|
'name' => '<root>',
|
||||||
'name' => $file_page ? $file_page->title() : $fileInfo->getFilename(),
|
'value' => '',
|
||||||
'value' => $file_page ? $file_page->route() : $file_path,
|
'item-key' => '',
|
||||||
'item-key' => basename($file_page ? $file_page->route() : $file_path),
|
'filename' => '.',
|
||||||
'filename' => $fileInfo->getFilename(),
|
'extension' => '',
|
||||||
'extension' => $type === 'dir' ? '' : $fileInfo->getExtension(),
|
'type' => 'root',
|
||||||
'type' => $type,
|
'modified' => $fileInfo->getMTime(),
|
||||||
'modified' => $fileInfo->getMTime(),
|
'size' => 0
|
||||||
'size' => $fileInfo->getSize()
|
];
|
||||||
];
|
} else {
|
||||||
|
$file_page = $page_instances[$fileInfo->getPathname()] ?? null;
|
||||||
|
$file_path = Utils::replaceFirstOccurrence(GRAV_ROOT, '', $fileInfo->getPathname());
|
||||||
|
$type = $fileInfo->getType();
|
||||||
|
|
||||||
|
$payload = [
|
||||||
|
'name' => $file_page ? $file_page->title() : $fileName,
|
||||||
|
'value' => $file_page ? $file_page->route() : $file_path,
|
||||||
|
'item-key' => basename($file_page ? $file_page->route() : $file_path),
|
||||||
|
'filename' => $fileName,
|
||||||
|
'extension' => $type === 'dir' ? '' : $fileInfo->getExtension(),
|
||||||
|
'type' => $type,
|
||||||
|
'modified' => $fileInfo->getMTime(),
|
||||||
|
'size' => $fileInfo->getSize()
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
// Simple filter for name or extension
|
// Simple filter for name or extension
|
||||||
if (($filters['name'] && Utils::contains($payload['basename'], $filters['name'])) ||
|
if (($filters['name'] && Utils::contains($payload['basename'], $filters['name'])) ||
|
||||||
|
|||||||
@@ -47,6 +47,8 @@ export class Parents {
|
|||||||
// prepend icon
|
// prepend icon
|
||||||
if (item.children || item.type === 'dir') {
|
if (item.children || item.type === 'dir') {
|
||||||
prependClasses.push('fa-folder');
|
prependClasses.push('fa-folder');
|
||||||
|
} else if (item.type === 'root') {
|
||||||
|
prependClasses.push('fa-sitemap');
|
||||||
} else if (item.type === 'file') {
|
} else if (item.type === 'file') {
|
||||||
prependClasses.push('fa-file-o');
|
prependClasses.push('fa-file-o');
|
||||||
}
|
}
|
||||||
|
|||||||
2
themes/grav/css-compiled/preset.css
vendored
2
themes/grav/css-compiled/preset.css
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
2
themes/grav/css-compiled/template.css
vendored
2
themes/grav/css-compiled/template.css
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
2
themes/grav/js/admin.min.js
vendored
2
themes/grav/js/admin.min.js
vendored
File diff suppressed because one or more lines are too long
@@ -538,6 +538,10 @@ textarea.frontmatter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[data-remodal-id="parents"] {
|
[data-remodal-id="parents"] {
|
||||||
|
form {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
form > h1 {
|
form > h1 {
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
}
|
}
|
||||||
@@ -555,6 +559,10 @@ textarea.frontmatter {
|
|||||||
list-style-type: none;
|
list-style-type: none;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.parents-content:empty {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sortables
|
// Sortables
|
||||||
|
|||||||
Reference in New Issue
Block a user