PHP Classes

File: src/App/View/Helper/EventAttr.php

Recommend this page to a friend!
  Packages of Thierry Feuzeu   Jaxon   src/App/View/Helper/EventAttr.php   Download  
File: src/App/View/Helper/EventAttr.php
Role: Class source
Content type: text/plain
Description: Class source
Class: Jaxon
Call PHP classes from JavaScript using AJAX
Author: By
Last change:
Date: 4 months ago
Size: 2,042 bytes
 

Contents

Class file image Download
<?php

namespace Jaxon\App\View\Helper;

/**
 * EventAttr.php
 *
 * Wrapper for the event handler custom HTML attributes.
 *
 * @package jaxon-core
 * @author Thierry Feuzeu
 * @copyright 2025 Thierry Feuzeu <thierry.feuzeu@gmail.com>
 * @license https://opensource.org/licenses/BSD-3-Clause BSD 3-Clause License
 * @link https://github.com/jaxon-php/jaxon-core
 */

use Jaxon\Script\JsExpr;

use function
count;
use function
htmlentities;
use function
json_encode;
use function
trim;

class
EventAttr
{
   
/**
     * @var array
     */
   
private array $aHandlers = [];

   
/**
     * The constructor
     *
     * @param string $sSelector
     */
   
public function __construct(private string $sSelector)
    {}

   
/**
     * Set a selector for the next event handler
     *
     * @param string $sSelector
     *
     * @return self
     */
   
public function select(string $sSelector): self
   
{
       
$this->sSelector = trim($sSelector);
        return
$this;
    }

   
/**
     * Set an event handler with the "on" keyword
     *
     * @param string $event
     * @param JsExpr $xJsExpr
     *
     * @return self
     */
   
public function on(string $event, JsExpr $xJsExpr): self
   
{
        if(
$this->sSelector === '')
        {
            return
$this;
        }

       
$this->aHandlers[] = [
           
'select' => $this->sSelector,
           
'event' => trim($event),
           
'handler' => $xJsExpr,
        ];
       
$this->sSelector = '';
        return
$this;
    }

   
/**
     * Shortcut to set a click event handler
     *
     * @param JsExpr $xJsExpr
     *
     * @return self
     */
   
public function click(JsExpr $xJsExpr): self
   
{
        return
$this->on('click', $xJsExpr);
    }

   
/**
     * Convert to string.
     *
     * @return string
     */
   
public function __toString(): string
   
{
       
// No output if no handler is defined.
       
return count($this->aHandlers) === 0 ? '' : 'jxn-event="' .
           
htmlentities(json_encode($this->aHandlers)) . '"';
    }
}