setFlags( isset( $config['flags'] ) ? $config['flags'] : null ); } /** * Check if a flag is set. * * @param string $flag Name of flag * @return boolean Has flag */ public function hasFlag( $flag ) { return isset( $this->flags[$flag] ); } /** * Get the names of all flags set. * * @return string[] Flag names */ public function getFlags() { return array_keys( $this->flags ); } /** * Clear all flags. * * @chainable */ public function clearFlags() { $remove = array(); $classPrefix = 'oo-ui-flaggedElement-'; foreach ( $this->flags as $flag ) { $remove[] = $classPrefix . $flag; } $this->target->removeClasses( $remove ); $this->flags = array(); return $this; } /** * Add one or more flags. * * @param string|array $flags One or more flags to add, or an array keyed by flag name * containing boolean set/remove instructions. * @chainable */ public function setFlags( $flags ) { $add = array(); $remove = array(); $classPrefix = 'oo-ui-flaggedElement-'; if ( is_string( $flags ) ) { // Set if ( !isset( $this->flags[$flags] ) ) { $this->flags[$flags] = true; $add[] = $classPrefix . $flags; } } elseif ( is_array( $flags ) ) { foreach ( $flags as $key => $value ) { if ( is_numeric( $key ) ) { // Set if ( !isset( $this->flags[$value] ) ) { $this->flags[$value] = true; $add[] = $classPrefix . $value; } } else { if ( $value ) { // Set if ( !isset( $this->flags[$key] ) ) { $this->flags[$key] = true; $add[] = $classPrefix . $key; } } else { // Remove if ( isset( $this->flags[$key] ) ) { unset( $this->flags[$key] ); $remove[] = $classPrefix . $key; } } } } } $this->target ->addClasses( $add ) ->removeClasses( $remove ); return $this; } public function getConfig( &$config ) { if ( !empty( $this->flags ) ) { $config['flags'] = $this->getFlags(); } return parent::getConfig( $config ); } }