mirror of https://github.com/IoTcat/ushio-img.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
352 lines
7.2 KiB
352 lines
7.2 KiB
<?php |
|
/** |
|
* HTML布局帮手 |
|
* |
|
* @category typecho |
|
* @package Widget |
|
* @copyright Copyright (c) 2008 Typecho team (http://www.typecho.org) |
|
* @license GNU General Public License 2.0 |
|
* @version $Id$ |
|
*/ |
|
|
|
/** |
|
* HTML布局帮手类 |
|
* |
|
* @category typecho |
|
* @package Widget |
|
* @copyright Copyright (c) 2008 Typecho team (http://www.typecho.org) |
|
* @license GNU General Public License 2.0 |
|
*/ |
|
class Typecho_Widget_Helper_Layout |
|
{ |
|
/** |
|
* 元素列表 |
|
* |
|
* @access private |
|
* @var array |
|
*/ |
|
private $_items = array(); |
|
|
|
/** |
|
* 表单属性列表 |
|
* |
|
* @access private |
|
* @var array |
|
*/ |
|
private $_attributes = array(); |
|
|
|
/** |
|
* 标签名称 |
|
* |
|
* @access private |
|
* @var string |
|
*/ |
|
private $_tagName = 'div'; |
|
|
|
/** |
|
* 是否自闭合 |
|
* |
|
* @access private |
|
* @var boolean |
|
*/ |
|
private $_close = false; |
|
|
|
/** |
|
* 是否强制自闭合 |
|
* |
|
* @access private |
|
* @var boolean |
|
*/ |
|
private $_forceClose = NULL; |
|
|
|
/** |
|
* 内部数据 |
|
* |
|
* @access private |
|
* @var string |
|
*/ |
|
private $_html; |
|
|
|
/** |
|
* 父节点 |
|
* |
|
* @access private |
|
* @var Typecho_Widget_Helper_Layout |
|
*/ |
|
private $_parent; |
|
|
|
/** |
|
* 构造函数,设置标签名称 |
|
* |
|
* @access public |
|
* @param string $tagName 标签名称 |
|
* @param array $attributes 属性列表 |
|
* @return void |
|
*/ |
|
public function __construct($tagName = 'div', array $attributes = NULL) |
|
{ |
|
$this->setTagName($tagName); |
|
|
|
if (!empty($attributes)) { |
|
foreach ($attributes as $attributeName => $attributeValue) { |
|
$this->setAttribute($attributeName, $attributeValue); |
|
} |
|
} |
|
} |
|
|
|
/** |
|
* 增加元素 |
|
* |
|
* @access public |
|
* @param Typecho_Widget_Helper_Layout $item 元素 |
|
* @return Typecho_Widget_Helper_Layout |
|
*/ |
|
public function addItem(Typecho_Widget_Helper_Layout $item) |
|
{ |
|
$item->setParent($this); |
|
$this->_items[] = $item; |
|
return $this; |
|
} |
|
|
|
/** |
|
* 删除元素 |
|
* |
|
* @access public |
|
* @param Typecho_Widget_Helper_Layout $item 元素 |
|
* @return Typecho_Widget_Helper_Layout |
|
*/ |
|
public function removeItem(Typecho_Widget_Helper_Layout $item) |
|
{ |
|
unset($this->_items[array_search($item, $this->_items)]); |
|
return $this; |
|
} |
|
|
|
/** |
|
* getItems |
|
* |
|
* @access public |
|
* @return array |
|
*/ |
|
public function getItems() |
|
{ |
|
return $this->_items; |
|
} |
|
|
|
/** |
|
* 设置内部数据 |
|
* |
|
* @access public |
|
* @param mixed $html 内部数据 |
|
* @return unknown |
|
*/ |
|
public function html($html = false) |
|
{ |
|
if (false === $html) { |
|
if (empty($this->_html)) { |
|
foreach ($this->_items as $item) { |
|
$item->render(); |
|
} |
|
} else { |
|
echo $this->_html; |
|
} |
|
} else { |
|
$this->_html = $html; |
|
return $this; |
|
} |
|
} |
|
|
|
/** |
|
* 设置标签名 |
|
* |
|
* @access public |
|
* @param string $tagName 标签名 |
|
* @return void |
|
*/ |
|
public function setTagName($tagName) |
|
{ |
|
$this->_tagName = $tagName; |
|
} |
|
|
|
/** |
|
* getTagName |
|
* |
|
* @param mixed $tagName |
|
* @access public |
|
* @return void |
|
*/ |
|
public function getTagName($tagName) |
|
{} |
|
|
|
/** |
|
* 设置表单属性 |
|
* |
|
* @access public |
|
* @param string $attributeName 属性名称 |
|
* @param string $attributeValue 属性值 |
|
* @return Typecho_Widget_Helper_Layout |
|
*/ |
|
public function setAttribute($attributeName, $attributeValue) |
|
{ |
|
$this->_attributes[$attributeName] = $attributeValue; |
|
return $this; |
|
} |
|
|
|
/** |
|
* 移除某个属性 |
|
* |
|
* @access public |
|
* @param string $attributeName 属性名称 |
|
* @return Typecho_Widget_Helper_Layout |
|
*/ |
|
public function removeAttribute($attributeName) |
|
{ |
|
if (isset($this->_attributes[$attributeName])) { |
|
unset($this->_attributes[$attributeName]); |
|
} |
|
|
|
return $this; |
|
} |
|
|
|
/** |
|
* 获取属性 |
|
* |
|
* @access public |
|
* @param string $attributeName 属性名 |
|
* @return string |
|
*/ |
|
public function getAttribute($attributeName) |
|
{ |
|
return isset($this->_attributes[$attributeName]) ? $this->_attributes[$attributeName] : NULL; |
|
} |
|
|
|
/** |
|
* 设置是否自闭合 |
|
* |
|
* @access public |
|
* @param boolean $close 是否自闭合 |
|
* @return Typecho_Widget_Helper_Layout |
|
*/ |
|
public function setClose($close) |
|
{ |
|
$this->_forceClose = $close; |
|
return $this; |
|
} |
|
|
|
/** |
|
* 设置父节点 |
|
* |
|
* @access public |
|
* @param Typecho_Widget_Helper_Layout $parent 父节点 |
|
* @return Typecho_Widget_Helper_Layout |
|
*/ |
|
public function setParent(Typecho_Widget_Helper_Layout $parent) |
|
{ |
|
$this->_parent = $parent; |
|
return $this; |
|
} |
|
|
|
/** |
|
* 获取父节点 |
|
* |
|
* @access public |
|
* @return Typecho_Widget_Helper_Layout |
|
*/ |
|
public function getParent() |
|
{ |
|
return $this->_parent; |
|
} |
|
|
|
/** |
|
* 增加到某布局元素集合中 |
|
* |
|
* @access public |
|
* @param Typecho_Widget_Helper_Layout $parent 布局对象 |
|
* @return Typecho_Widget_Helper_Layout |
|
*/ |
|
public function appendTo(Typecho_Widget_Helper_Layout $parent) |
|
{ |
|
$parent->addItem($this); |
|
return $this; |
|
} |
|
|
|
/** |
|
* 开始标签 |
|
* |
|
* @access public |
|
* @return void |
|
*/ |
|
public function start() |
|
{ |
|
/** 输出标签 */ |
|
echo $this->_tagName ? "<{$this->_tagName}" : NULL; |
|
|
|
/** 输出属性 */ |
|
foreach ($this->_attributes as $attributeName => $attributeValue) { |
|
echo " {$attributeName}=\"{$attributeValue}\""; |
|
} |
|
|
|
/** 支持自闭合 */ |
|
if (!$this->_close && $this->_tagName) { |
|
echo ">\n"; |
|
} |
|
} |
|
|
|
/** |
|
* 结束标签 |
|
* |
|
* @access public |
|
* @return void |
|
*/ |
|
public function end() |
|
{ |
|
if ($this->_tagName) { |
|
echo $this->_close ? " />\n" : "</{$this->_tagName}>\n"; |
|
} |
|
} |
|
|
|
/** |
|
* 设置属性 |
|
* |
|
* @access public |
|
* @param string $attributeName 属性名称 |
|
* @param string $attributeValue 属性值 |
|
* @return void |
|
*/ |
|
public function __set($name, $value) |
|
{ |
|
$this->_attributes[$name] = $value; |
|
} |
|
|
|
/** |
|
* 获取属性 |
|
* |
|
* @access public |
|
* @param string $attributeName 属性名称 |
|
* @return void |
|
*/ |
|
public function __get($name) |
|
{ |
|
return isset($this->_attributes[$name]) ? $this->_attributes[$name] : NULL; |
|
} |
|
|
|
/** |
|
* 输出所有元素 |
|
* |
|
* @access public |
|
* @return void |
|
*/ |
|
public function render() |
|
{ |
|
if (empty($this->_items) && empty($this->_html)) { |
|
$this->_close = true; |
|
} |
|
|
|
if (NULL !== $this->_forceClose) { |
|
$this->_close = $this->_forceClose; |
|
} |
|
|
|
$this->start(); |
|
$this->html(); |
|
$this->end(); |
|
} |
|
}
|
|
|