label = $label; $this->icon = $icon; $this->id = $id; $this->class = $class; $this->attributes = $attributes; $this->weight = $weight; $this->action = $action; $this->iconOnly = $iconOnly; $this->href = $href; // Weight can only be normal, primary, or quiet if ( $this->weight != 'primary' && $this->weight != 'quiet' ) { $this->weight = 'normal'; } // Action can only be default, progressive or destructive if ( $this->action != 'progressive' && $this->action != 'destructive' ) { $this->action = 'default'; } } /** * Constructs button classes based on the props */ private function getClasses(): string { $classes = 'mw-ui-button'; switch ( $this->weight ) { case 'primary': $classes .= ' mw-ui-primary'; break; case 'quiet': $classes .= ' mw-ui-quiet'; break; } switch ( $this->action ) { case 'progressive': $classes .= ' mw-ui-progressive'; break; case 'destructive': $classes .= ' mw-ui-destructive'; break; } if ( $this->iconOnly ) { $classes .= ' mw-ui-icon-element'; } if ( $this->class ) { $classes .= ' ' . $this->class; } return $classes; } /** * @inheritDoc */ public function getTemplateData(): array { $arrayAttributes = []; foreach ( $this->attributes as $key => $value ) { if ( $value === null ) { continue; } $arrayAttributes[] = [ 'key' => $key, 'value' => $value ]; } return [ 'label' => $this->label, 'icon' => $this->icon, 'id' => $this->id, 'class' => $this->getClasses(), 'href' => $this->href, 'array-attributes' => $arrayAttributes ]; } }