141 lines
4.2 KiB
PHP
141 lines
4.2 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
/**
|
|
* The style setting class file of zin of ZenTaoPMS.
|
|
*
|
|
* @copyright Copyright 2023 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
|
|
* @author Hao Sun <sunhao@easycorp.ltd>
|
|
* @package zin
|
|
* @version $Id
|
|
* @link https://www.zentao.net
|
|
*/
|
|
|
|
namespace zin\utils;
|
|
|
|
require_once __DIR__ . DS . 'dataset.class.php';
|
|
|
|
/**
|
|
* Manage style for html element and widgets
|
|
*
|
|
* Example:
|
|
*
|
|
* // Create a style object an convert to css string
|
|
* $style = static::create(array('color' => 'red'));
|
|
* echo $style(); // Output "color:red"
|
|
*
|
|
* // Above example same as:
|
|
* echo static::css(array('color' => 'red'));
|
|
*
|
|
* // Modifier style
|
|
* $style = static::create(array('color' => 'red'));
|
|
* $style->set('background', 'green');
|
|
*
|
|
* // Modifier style with property name directly
|
|
* $style->background = 'green';
|
|
*
|
|
* // Get style value
|
|
* echo $style->get('background'); // Output "green"
|
|
*
|
|
* // Get style value with property name directly
|
|
* echo $style->background; // Output "green"
|
|
*
|
|
* @todo @sunhao: Validate style properties on modifying
|
|
*/
|
|
class styleset extends dataset
|
|
{
|
|
/**
|
|
* Format CSS variable name with prefix "--"
|
|
*
|
|
* @access public
|
|
* @param string $name - CSS variable name
|
|
* @return string
|
|
*/
|
|
public static function formatVarName(string $name): string
|
|
{
|
|
return \zin\str_starts_with($name, '--') ? $name : "--$name";
|
|
}
|
|
|
|
/**
|
|
* Set or get css variable, an array can be passed to set multiple variables
|
|
* If only pass variable name, then the variable value will be returned
|
|
* If no params passed, then return all setted variables with an array
|
|
*
|
|
* Notice: no need to prepend prefix '--' to variable name, the method will prepend it automatically, if prepended already, the method will skip to prepend smartly
|
|
*
|
|
* Example:
|
|
*
|
|
* // Create a style object and set
|
|
* $style = new style();
|
|
* $style->cssVar('text-size', '14px');
|
|
*
|
|
* // Set multiple variables
|
|
* $style->cssVar(array('text-color' => 'yellow', 'background-image' => 'none'));
|
|
*
|
|
* // Get variable value
|
|
* echo $style->cssVar('text-size'); // Output "14px"
|
|
*
|
|
* // Get all variables value
|
|
* echo $style->cssVar();
|
|
* // Output array('text-size' => '14px', 'color' => 'yellow', 'background' => 'none');
|
|
*
|
|
* // Remove variable by setting value with an empty string
|
|
* $style->cssVar('text-color', '');
|
|
*
|
|
* @access public
|
|
* @param array|string $name - Variable name or variables list
|
|
* @param string|null $value - Property value
|
|
* @return styleset|array|string
|
|
*/
|
|
public function cssVar(array|string $name = '', ?string $value = null): styleset|array|string
|
|
{
|
|
/* Support for setting multiple variables by an array */
|
|
if(is_array($name))
|
|
{
|
|
foreach($name as $n => $value) $this->set(static::formatVarName($n), $value);
|
|
return $this;
|
|
}
|
|
|
|
/* Return all setted variables without passed any params */
|
|
if(empty($name))
|
|
{
|
|
$vars = array();
|
|
foreach ($this->storedData as $prop => $value)
|
|
{
|
|
if(!str_starts_with($name, '--')) continue;
|
|
$vars[substr($prop, 2)] = $value;
|
|
}
|
|
return $vars;
|
|
}
|
|
|
|
$varName = static::formatVarName($name);
|
|
|
|
/* Return the specific variable value by name */
|
|
if($value === null) return $this->get($varName);
|
|
|
|
/* Set the specific variable value and return style object self */
|
|
$this->set($varName, $value === '' ? null : $value);
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Convert to string
|
|
*
|
|
* @access public
|
|
* @return string
|
|
*/
|
|
public function toStr(): string
|
|
{
|
|
$pairs = array();
|
|
|
|
foreach($this->storedData as $prop => $value)
|
|
{
|
|
/* Skip any empty value */
|
|
if($value === null || $value === '') continue;
|
|
|
|
$pairs[] = $prop . ': ' . strval($value) . ';';
|
|
}
|
|
|
|
return implode(' ', $pairs);
|
|
}
|
|
}
|