%PDF- %PDF-
Direktori : /www/varak.net/wiki.varak.net/vendor/oojs/oojs-ui/php/mixins/ |
Current File : //www/varak.net/wiki.varak.net/vendor/oojs/oojs-ui/php/mixins/GroupElement.php |
<?php namespace OOUI; /** * Element containing a sequence of child elements. * * @abstract */ trait GroupElement { /** * List of items in the group as Elements. * * @var Element[] */ protected $items = []; /** * @var Tag */ protected $group; /** * @param array $config Configuration options */ public function initializeGroupElement( array $config = [] ) { // Properties $this->group = $config['group'] ?? new Tag( 'div' ); $this->registerConfigCallback( function ( &$config ) { $config['items'] = $this->items; } ); } /** * Check if there are no items. * * @return bool Group is empty */ public function isEmpty() { return !count( $this->items ); } /** * Get items. * * @return Element[] Items */ public function getItems() { return $this->items; } /** * Add items. * * Adding an existing item will move it. * * @param Element[] $items Items * @param number|null $index Index to insert items at * @return $this */ public function addItems( array $items, $index = null ) { foreach ( $items as $item ) { // Check if item exists then remove it first, effectively "moving" it $currentIndex = array_search( $item, $this->items, true ); if ( $currentIndex !== false ) { $this->removeItems( [ $item ] ); // Adjust index to compensate for removal if ( $currentIndex < $index ) { $index--; } } // Add the item $item->setElementGroup( $this ); } if ( $index === null || $index < 0 || $index >= count( $this->items ) ) { $this->items = array_merge( $this->items, $items ); } else { array_splice( $this->items, $index, 0, $items ); } // Update actual target element contents to reflect our list $this->group->clearContent(); $this->group->appendContent( $this->items ); return $this; } /** * Remove items. * * @param Element[] $items Items to remove * @return $this */ public function removeItems( $items ) { foreach ( $items as $item ) { $index = array_search( $item, $this->items, true ); if ( $index !== false ) { $item->setElementGroup( null ); array_splice( $this->items, $index, 1 ); } } // Update actual target element contents to reflect our list $this->group->clearContent(); $this->group->appendContent( $this->items ); return $this; } /** * Clear all items. * * Items will be detached, not removed, so they can be used later. * * @return $this */ public function clearItems() { foreach ( $this->items as $item ) { $item->setElementGroup( null ); } $this->items = []; $this->group->clearContent(); return $this; } }