1
0
mirror of https://github.com/processwire/processwire.git synced 2025-08-07 15:26:54 +02:00

Updates to ProcessPageList to make some parts more hookable

This commit is contained in:
Ryan Cramer
2025-01-29 10:02:06 -05:00
parent 1805ad0a59
commit e1e938591d
3 changed files with 60 additions and 17 deletions

View File

@@ -228,6 +228,7 @@ $(document).ready(function() {
function hideItem($item) {
var $actions = $item.find('.PageListActions');
if($item.hasClass('PageListItemOpen') && $actions.hasClass('PageListActionsKeepOpen')) return;
$item.removeClass('PageListItemHover');
if($actions.is(":visible")) { // || $hoveredItem.hasClass('PageListItemOpen')) {
$actions.animate({opacity: 0}, options.hoverActionFade, function () {
@@ -565,6 +566,9 @@ $(document).ready(function() {
$loading.fadeOut('fast');
}
data.list = $target;
data.item = $target.prev('.PageListItem');
if(replace) {
$children.show();
loaded();

File diff suppressed because one or more lines are too long

View File

@@ -27,6 +27,7 @@
* @method string ajaxAction($action)
* @method PageArray find($selectorString, Page $page)
* @method array getHidePageIDs(array $a = array())
* @method string getSelector(Page $page, array $options)
*
* @todo Option to configure whether "Pub" action should appear for non-superusers
*
@@ -381,16 +382,9 @@ class ProcessPageList extends Process implements ConfigurableModule {
if(is_null($limit)) $limit = $this->limit;
if(is_null($start)) $start = $this->start;
if($limit) {
$selector = "start=$start, limit=$limit, status<" . Page::statusMax;
if($this->useTrash && !$superuser) {
$trashID = $this->wire()->config->trashPageID;
if($page->id == $trashID && $user->hasPermission('page-edit') && $page->listable()) {
$selector .= ", check_access=0";
}
}
$selector = $this->getSelector($page, [ 'start' => $start, 'limit' => $limit ]);
if(strlen($selector)) {
$children = $this->find($selector, $page);
} else {
$children = $this->wire()->pages->newPageArray();
@@ -409,6 +403,46 @@ class ProcessPageList extends Process implements ConfigurableModule {
return $renderer;
}
/**
* Get selector string to use in finding children
*
* @param Page $page
* @param array $options
* @return string
* @since 3.0.245
*
*/
public function ___getSelector(Page $page, array $options) {
$defaults = [
'start' => 0,
'limit' => 50,
];
$options = array_merge($defaults, $options);
$user = $this->wire()->user;
$start = (int) $options['start'];
$limit = (int) $options['limit'];
$selector = "start=$start, limit=$limit, status<" . Page::statusMax;
if($this->useTrash && !$user->isSuperuser()) {
$trashID = $this->wire()->config->trashPageID;
if($page->id == $trashID && $user->hasPermission('page-edit') && $page->listable()) {
$selector .= ", check_access=0";
}
}
if($page->id === $this->wire()->config->trashPageID && !preg_match('/\bsort=/', $selector)) {
$sortfield = $page->sortfield();
if(!$sortfield || $sortfield === 'sort') {
$selector = trim("$selector, sort=-modified", ',');
}
}
return $selector;
}
/**
* Set the page label field
*
@@ -444,6 +478,17 @@ class ProcessPageList extends Process implements ConfigurableModule {
return $pageLabelField;
}
/**
* Get parent page that current request is for
*
* @return Page|null
* @since 3.0.245
*
*/
public function getPage() {
return $this->page;
}
/**
* Process an AJAX action and return JSON string
*
@@ -491,12 +536,6 @@ class ProcessPageList extends Process implements ConfigurableModule {
*
*/
public function ___find($selectorString, Page $page) {
if($page->id === $this->wire()->config->trashPageID && !preg_match('/\bsort=/', $selectorString)) {
$sortfield = $page->sortfield();
if(!$sortfield || $sortfield === 'sort') {
$selectorString = trim("$selectorString,sort=-modified", ',');
}
}
return $page->children($selectorString);
}