JSMessageTestController.php

Same filename in other branches
  1. 9 core/modules/system/tests/modules/js_message_test/src/Controller/JSMessageTestController.php
  2. 8.9.x core/modules/system/tests/modules/js_message_test/src/Controller/JSMessageTestController.php
  3. 10 core/modules/system/tests/modules/js_message_test/src/Controller/JSMessageTestController.php

Namespace

Drupal\js_message_test\Controller

File

core/modules/system/tests/modules/js_message_test/src/Controller/JSMessageTestController.php

View source
<?php

declare (strict_types=1);
namespace Drupal\js_message_test\Controller;


/**
 * Test Controller to show message links.
 */
class JSMessageTestController {
    
    /**
     * Gets the test types.
     *
     * @return string[]
     *   The test types.
     */
    public static function getTypes() {
        return [
            'status',
            'error',
            'warning',
        ];
    }
    
    /**
     * Gets the test messages selectors.
     *
     * @return string[]
     *   The test messages selectors.
     *
     * @see core/modules/system/tests/themes/test_messages/templates/status-messages.html.twig
     */
    public static function getMessagesSelectors() {
        return [
            '',
            '[data-drupal-messages-other]',
        ];
    }
    
    /**
     * Displays links to show messages via JavaScript with messages from backend.
     *
     * @return array
     *   Render array for links.
     */
    public function messageLinksWithSystemMessages() {
        // Add PHP rendered messages to the page.
        $messenger = \Drupal::messenger();
        $messenger->addStatus('PHP Status');
        $messenger->addWarning('PHP Warning');
        $messenger->addError('PHP Error');
        return $this->messageLinks();
    }
    
    /**
     * Displays links to show messages via JavaScript.
     *
     * @return array
     *   Render array for links.
     */
    public function messageLinks() {
        $buttons = [];
        foreach (static::getMessagesSelectors() as $messagesSelector) {
            $buttons[$messagesSelector] = [
                '#type' => 'details',
                '#open' => TRUE,
                '#title' => "Message area: {$messagesSelector}",
                '#attributes' => [
                    'data-drupal-messages-area' => $messagesSelector,
                ],
            ];
            foreach (static::getTypes() as $type) {
                $buttons[$messagesSelector]["add-{$type}"] = [
                    '#type' => 'html_tag',
                    '#tag' => 'button',
                    '#value' => "Add {$type}",
                    '#attributes' => [
                        'type' => 'button',
                        'id' => "add-{$messagesSelector}-{$type}",
                        'data-type' => $type,
                        'data-action' => 'add',
                    ],
                ];
                $buttons[$messagesSelector]["remove-{$type}"] = [
                    '#type' => 'html_tag',
                    '#tag' => 'button',
                    '#value' => "Remove {$type}",
                    '#attributes' => [
                        'type' => 'button',
                        'id' => "remove-{$messagesSelector}-{$type}",
                        'data-type' => $type,
                        'data-action' => 'remove',
                    ],
                ];
            }
        }
        // Add alternative message area.
        $buttons[static::getMessagesSelectors()[1]]['messages-other-area'] = [
            '#type' => 'html_tag',
            '#tag' => 'div',
            '#attributes' => [
                'data-drupal-messages-other' => TRUE,
            ],
        ];
        $buttons['add-multiple'] = [
            '#type' => 'html_tag',
            '#tag' => 'button',
            '#value' => "Add multiple",
            '#attributes' => [
                'type' => 'button',
                'id' => 'add-multiple',
                'data-action' => 'add-multiple',
            ],
        ];
        $buttons['remove-multiple'] = [
            '#type' => 'html_tag',
            '#tag' => 'button',
            '#value' => "Remove multiple",
            '#attributes' => [
                'type' => 'button',
                'id' => 'remove-multiple',
                'data-action' => 'remove-multiple',
            ],
        ];
        $buttons['add-multiple-error'] = [
            '#type' => 'html_tag',
            '#tag' => 'button',
            '#value' => "Add multiple 'error' and one 'status'",
            '#attributes' => [
                'type' => 'button',
                'id' => 'add-multiple-error',
                'data-action' => 'add-multiple-error',
            ],
        ];
        $buttons['remove-type'] = [
            '#type' => 'html_tag',
            '#tag' => 'button',
            '#value' => "Remove 'error' type",
            '#attributes' => [
                'type' => 'button',
                'id' => 'remove-type',
                'data-action' => 'remove-type',
            ],
        ];
        $buttons['clear-all'] = [
            '#type' => 'html_tag',
            '#tag' => 'button',
            '#value' => "Clear all",
            '#attributes' => [
                'type' => 'button',
                'id' => 'clear-all',
                'data-action' => 'clear-all',
            ],
        ];
        $buttons['id-no-status'] = [
            '#type' => 'html_tag',
            '#tag' => 'button',
            '#value' => "Id no status",
            '#attributes' => [
                'type' => 'button',
                'id' => 'id-no-status',
                'data-action' => 'id-no-status',
            ],
        ];
        return $buttons + [
            '#attached' => [
                'library' => [
                    'js_message_test/show_message',
                ],
                'drupalSettings' => [
                    'testMessages' => [
                        'selectors' => static::getMessagesSelectors(),
                        'types' => static::getTypes(),
                    ],
                ],
            ],
        ];
    }

}

Classes

Title Deprecated Summary
JSMessageTestController Test Controller to show message links.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.