tag.php
来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· PHP 代码 · 共 1,418 行 · 第 1/3 页
PHP
1,418 行
*/
function SimpleRadioButtonTag($attributes) {
$this->SimpleWidget('input', $attributes);
if ($this->getAttribute('value') === false) {
$this->_setAttribute('value', 'on');
}
}
/**
* Tag contains no content.
* @return boolean False.
* @access public
*/
function expectEndTag() {
return false;
}
/**
* The only allowed value sn the one in the
* "value" attribute.
* @param string $value New value.
* @return boolean True if allowed.
* @access public
*/
function setValue($value) {
if ($value === false) {
return parent::setValue($value);
}
if ($value != $this->getAttribute('value')) {
return false;
}
return parent::setValue($value);
}
/**
* Accessor for starting value.
* @return string Parsed value.
* @access public
*/
function getDefault() {
if ($this->getAttribute('checked') !== false) {
return $this->getAttribute('value');
}
return false;
}
}
/**
* Checkbox widget.
* @package SimpleTest
* @subpackage WebTester
*/
class SimpleCheckboxTag extends SimpleWidget {
/**
* Starts with attributes only.
* @param hash $attributes Attribute names and
* string values.
*/
function SimpleCheckboxTag($attributes) {
$this->SimpleWidget('input', $attributes);
if ($this->getAttribute('value') === false) {
$this->_setAttribute('value', 'on');
}
}
/**
* Tag contains no content.
* @return boolean False.
* @access public
*/
function expectEndTag() {
return false;
}
/**
* The only allowed value in the one in the
* "value" attribute. The default for this
* attribute is "on". If this widget is set to
* true, then the usual value will be taken.
* @param string $value New value.
* @return boolean True if allowed.
* @access public
*/
function setValue($value) {
if ($value === false) {
return parent::setValue($value);
}
if ($value === true) {
return parent::setValue($this->getAttribute('value'));
}
if ($value != $this->getAttribute('value')) {
return false;
}
return parent::setValue($value);
}
/**
* Accessor for starting value. The default
* value is "on".
* @return string Parsed value.
* @access public
*/
function getDefault() {
if ($this->getAttribute('checked') !== false) {
return $this->getAttribute('value');
}
return false;
}
}
/**
* A group of multiple widgets with some shared behaviour.
* @package SimpleTest
* @subpackage WebTester
*/
class SimpleTagGroup {
var $_widgets = array();
/**
* Adds a tag to the group.
* @param SimpleWidget $widget
* @access public
*/
function addWidget(&$widget) {
$this->_widgets[] = &$widget;
}
/**
* Accessor to widget set.
* @return array All widgets.
* @access protected
*/
function &_getWidgets() {
return $this->_widgets;
}
/**
* Accessor for an attribute.
* @param string $label Attribute name.
* @return boolean Always false.
* @access public
*/
function getAttribute($label) {
return false;
}
/**
* Fetches the name for the widget from the first
* member.
* @return string Name of widget.
* @access public
*/
function getName() {
if (count($this->_widgets) > 0) {
return $this->_widgets[0]->getName();
}
}
/**
* Scans the widgets for one with the appropriate
* ID field.
* @param string $id ID value to try.
* @return boolean True if matched.
* @access public
*/
function isId($id) {
for ($i = 0, $count = count($this->_widgets); $i < $count; $i++) {
if ($this->_widgets[$i]->isId($id)) {
return true;
}
}
return false;
}
/**
* Scans the widgets for one with the appropriate
* attached label.
* @param string $label Attached label to try.
* @return boolean True if matched.
* @access public
*/
function isLabel($label) {
for ($i = 0, $count = count($this->_widgets); $i < $count; $i++) {
if ($this->_widgets[$i]->isLabel($label)) {
return true;
}
}
return false;
}
/**
* Dispatches the value into the form encoded packet.
* @param SimpleEncoding $encoding Form packet.
* @access public
*/
function write(&$encoding) {
$encoding->add($this->getName(), $this->getValue());
}
}
/**
* A group of tags with the same name within a form.
* @package SimpleTest
* @subpackage WebTester
*/
class SimpleCheckboxGroup extends SimpleTagGroup {
/**
* Accessor for current selected widget or false
* if none.
* @return string/array Widget values or false if none.
* @access public
*/
function getValue() {
$values = array();
$widgets = &$this->_getWidgets();
for ($i = 0, $count = count($widgets); $i < $count; $i++) {
if ($widgets[$i]->getValue() !== false) {
$values[] = $widgets[$i]->getValue();
}
}
return $this->_coerceValues($values);
}
/**
* Accessor for starting value that is active.
* @return string/array Widget values or false if none.
* @access public
*/
function getDefault() {
$values = array();
$widgets = &$this->_getWidgets();
for ($i = 0, $count = count($widgets); $i < $count; $i++) {
if ($widgets[$i]->getDefault() !== false) {
$values[] = $widgets[$i]->getDefault();
}
}
return $this->_coerceValues($values);
}
/**
* Accessor for current set values.
* @param string/array/boolean $values Either a single string, a
* hash or false for nothing set.
* @return boolean True if all values can be set.
* @access public
*/
function setValue($values) {
$values = $this->_makeArray($values);
if (! $this->_valuesArePossible($values)) {
return false;
}
$widgets = &$this->_getWidgets();
for ($i = 0, $count = count($widgets); $i < $count; $i++) {
$possible = $widgets[$i]->getAttribute('value');
if (in_array($widgets[$i]->getAttribute('value'), $values)) {
$widgets[$i]->setValue($possible);
} else {
$widgets[$i]->setValue(false);
}
}
return true;
}
/**
* Tests to see if a possible value set is legal.
* @param string/array/boolean $values Either a single string, a
* hash or false for nothing set.
* @return boolean False if trying to set a
* missing value.
* @access private
*/
function _valuesArePossible($values) {
$matches = array();
$widgets = &$this->_getWidgets();
for ($i = 0, $count = count($widgets); $i < $count; $i++) {
$possible = $widgets[$i]->getAttribute('value');
if (in_array($possible, $values)) {
$matches[] = $possible;
}
}
return ($values == $matches);
}
/**
* Converts the output to an appropriate format. This means
* that no values is false, a single value is just that
* value and only two or more are contained in an array.
* @param array $values List of values of widgets.
* @return string/array/boolean Expected format for a tag.
* @access private
*/
function _coerceValues($values) {
if (count($values) == 0) {
return false;
} elseif (count($values) == 1) {
return $values[0];
} else {
return $values;
}
}
/**
* Converts false or string into array. The opposite of
* the coercian method.
* @param string/array/boolean $value A single item is converted
* to a one item list. False
* gives an empty list.
* @return array List of values, possibly empty.
* @access private
*/
function _makeArray($value) {
if ($value === false) {
return array();
}
if (is_string($value)) {
return array($value);
}
return $value;
}
}
/**
* A group of tags with the same name within a form.
* Used for radio buttons.
* @package SimpleTest
* @subpackage WebTester
*/
class SimpleRadioGroup extends SimpleTagGroup {
/**
* Each tag is tried in turn until one is
* successfully set. The others will be
* unchecked if successful.
* @param string $value New value.
* @return boolean True if any allowed.
* @access public
*/
function setValue($value) {
if (! $this->_valueIsPossible($value)) {
return false;
}
$index = false;
$widgets = &$this->_getWidgets();
for ($i = 0, $count = count($widgets); $i < $count; $i++) {
if (! $widgets[$i]->setValue($value)) {
$widgets[$i]->setValue(false);
}
}
return true;
}
/**
* Tests to see if a value is allowed.
* @param string Attempted value.
* @return boolean True if a valid value.
* @access private
*/
function _valueIsPossible($value) {
$widgets = &$this->_getWidgets();
for ($i = 0, $count = count($widgets); $i < $count; $i++) {
if ($widgets[$i]->getAttribute('value') == $value) {
return true;
}
}
return false;
}
/**
* Accessor for current selected widget or false
* if none.
* @return string/boolean Value attribute or
* content of opton.
* @access public
*/
function getValue() {
$widgets = &$this->_getWidgets();
for ($i = 0, $count = count($widgets); $i < $count; $i++) {
if ($widgets[$i]->getValue() !== false) {
return $widgets[$i]->getValue();
}
}
return false;
}
/**
* Accessor for starting value that is active.
* @return string/boolean Value of first checked
* widget or false if none.
* @access public
*/
function getDefault() {
$widgets = &$this->_getWidgets();
for ($i = 0, $count = count($widgets); $i < $count; $i++) {
if ($widgets[$i]->getDefault() !== false) {
return $widgets[$i]->getDefault();
}
}
return false;
}
}
/**
* Tag to keep track of labels.
* @package SimpleTest
* @subpackage WebTester
*/
class SimpleLabelTag extends SimpleTag {
/**
* Starts with a named tag with attributes only.
* @param hash $attributes Attribute names and
* string values.
*/
function SimpleLabelTag($attributes) {
$this->SimpleTag('label', $attributes);
}
/**
* Access for the ID to attach the label to.
* @return string For attribute.
* @access public
*/
function getFor() {
return $this->getAttribute('for');
}
}
/**
* Tag to aid parsing the form.
* @package SimpleTest
* @subpackage WebTester
*/
class SimpleFormTag extends SimpleTag {
/**
* Starts with a named tag with attributes only.
* @param hash $attributes Attribute names and
* string values.
*/
function SimpleFormTag($attributes) {
$this->SimpleTag('form', $attributes);
}
}
/**
* Tag to aid parsing the frames in a page.
* @package SimpleTest
* @subpackage WebTester
*/
class SimpleFrameTag extends SimpleTag {
/**
* Starts with a named tag with attributes only.
* @param hash $attributes Attribute names and
* string values.
*/
function SimpleFrameTag($attributes) {
$this->SimpleTag('frame', $attributes);
}
/**
* Tag contains no content.
* @return boolean False.
* @access public
*/
function expectEndTag() {
return false;
}
}
?>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?