tag.php
来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· PHP 代码 · 共 1,418 行 · 第 1/3 页
PHP
1,418 行
* @access public
*/
function getLabel() {
if ($this->getAttribute('title')) {
return $this->getAttribute('title');
}
return $this->getAttribute('alt');
}
/**
* Test for a label match when searching.
* @param string $label Label to test.
* @return boolean True on match.
* @access public
*/
function isLabel($label) {
return trim($label) == trim($this->getLabel());
}
/**
* Dispatches the value into the form encoded packet.
* @param SimpleEncoding $encoding Form packet.
* @param integer $x X coordinate of click.
* @param integer $y Y coordinate of click.
* @access public
*/
function write(&$encoding, $x, $y) {
if ($this->getName()) {
$encoding->add($this->getName() . '.x', $x);
$encoding->add($this->getName() . '.y', $y);
} else {
$encoding->add('x', $x);
$encoding->add('y', $y);
}
}
}
/**
* Submit button as button tag.
* @package SimpleTest
* @subpackage WebTester
*/
class SimpleButtonTag extends SimpleWidget {
/**
* Starts with a named tag with attributes only.
* Defaults are very browser dependent.
* @param hash $attributes Attribute names and
* string values.
*/
function SimpleButtonTag($attributes) {
$this->SimpleWidget('button', $attributes);
}
/**
* Check to see if the tag can have both start and
* end tags with content in between.
* @return boolean True if content allowed.
* @access public
*/
function expectEndTag() {
return true;
}
/**
* Disables the setting of the button value.
* @param string $value Ignored.
* @return boolean True if allowed.
* @access public
*/
function setValue($value) {
return false;
}
/**
* Value of browser visible text.
* @return string Visible label.
* @access public
*/
function getLabel() {
return $this->getContent();
}
/**
* Test for a label match when searching.
* @param string $label Label to test.
* @return boolean True on match.
* @access public
*/
function isLabel($label) {
return trim($label) == trim($this->getLabel());
}
}
/**
* Content tag for text area.
* @package SimpleTest
* @subpackage WebTester
*/
class SimpleTextAreaTag extends SimpleWidget {
/**
* Starts with a named tag with attributes only.
* @param hash $attributes Attribute names and
* string values.
*/
function SimpleTextAreaTag($attributes) {
$this->SimpleWidget('textarea', $attributes);
}
/**
* Accessor for starting value.
* @return string Parsed value.
* @access public
*/
function getDefault() {
return $this->_wrap(SimpleHtmlSaxParser::decodeHtml($this->getContent()));
}
/**
* Applies word wrapping if needed.
* @param string $value New value.
* @return boolean True if allowed.
* @access public
*/
function setValue($value) {
return parent::setValue($this->_wrap($value));
}
/**
* Test to see if text should be wrapped.
* @return boolean True if wrapping on.
* @access private
*/
function _wrapIsEnabled() {
if ($this->getAttribute('cols')) {
$wrap = $this->getAttribute('wrap');
if (($wrap == 'physical') || ($wrap == 'hard')) {
return true;
}
}
return false;
}
/**
* Performs the formatting that is peculiar to
* this tag. There is strange behaviour in this
* one, including stripping a leading new line.
* Go figure. I am using Firefox as a guide.
* @param string $text Text to wrap.
* @return string Text wrapped with carriage
* returns and line feeds
* @access private
*/
function _wrap($text) {
$text = str_replace("\r\r\n", "\r\n", str_replace("\n", "\r\n", $text));
$text = str_replace("\r\n\n", "\r\n", str_replace("\r", "\r\n", $text));
if (strncmp($text, "\r\n", strlen("\r\n")) == 0) {
$text = substr($text, strlen("\r\n"));
}
if ($this->_wrapIsEnabled()) {
return wordwrap(
$text,
(integer)$this->getAttribute('cols'),
"\r\n");
}
return $text;
}
/**
* The content of textarea is not part of the page.
* @return boolean True.
* @access public
*/
function isPrivateContent() {
return true;
}
}
/**
* File upload widget.
* @package SimpleTest
* @subpackage WebTester
*/
class SimpleUploadTag extends SimpleWidget {
/**
* Starts with attributes only.
* @param hash $attributes Attribute names and
* string values.
*/
function SimpleUploadTag($attributes) {
$this->SimpleWidget('input', $attributes);
}
/**
* Tag contains no content.
* @return boolean False.
* @access public
*/
function expectEndTag() {
return false;
}
/**
* Dispatches the value into the form encoded packet.
* @param SimpleEncoding $encoding Form packet.
* @access public
*/
function write(&$encoding) {
if (! file_exists($this->getValue())) {
return;
}
$encoding->attach(
$this->getName(),
implode('', file($this->getValue())),
basename($this->getValue()));
}
}
/**
* Drop down widget.
* @package SimpleTest
* @subpackage WebTester
*/
class SimpleSelectionTag extends SimpleWidget {
var $_options;
var $_choice;
/**
* Starts with attributes only.
* @param hash $attributes Attribute names and
* string values.
*/
function SimpleSelectionTag($attributes) {
$this->SimpleWidget('select', $attributes);
$this->_options = array();
$this->_choice = false;
}
/**
* Adds an option tag to a selection field.
* @param SimpleOptionTag $tag New option.
* @access public
*/
function addTag(&$tag) {
if ($tag->getTagName() == 'option') {
$this->_options[] = &$tag;
}
}
/**
* Text within the selection element is ignored.
* @param string $content Ignored.
* @access public
*/
function addContent($content) {
}
/**
* Scans options for defaults. If none, then
* the first option is selected.
* @return string Selected field.
* @access public
*/
function getDefault() {
for ($i = 0, $count = count($this->_options); $i < $count; $i++) {
if ($this->_options[$i]->getAttribute('selected') !== false) {
return $this->_options[$i]->getDefault();
}
}
if ($count > 0) {
return $this->_options[0]->getDefault();
}
return '';
}
/**
* Can only set allowed values.
* @param string $value New choice.
* @return boolean True if allowed.
* @access public
*/
function setValue($value) {
for ($i = 0, $count = count($this->_options); $i < $count; $i++) {
if ($this->_options[$i]->isValue($value)) {
$this->_choice = $i;
return true;
}
}
return false;
}
/**
* Accessor for current selection value.
* @return string Value attribute or
* content of opton.
* @access public
*/
function getValue() {
if ($this->_choice === false) {
return $this->getDefault();
}
return $this->_options[$this->_choice]->getValue();
}
}
/**
* Drop down widget.
* @package SimpleTest
* @subpackage WebTester
*/
class MultipleSelectionTag extends SimpleWidget {
var $_options;
var $_values;
/**
* Starts with attributes only.
* @param hash $attributes Attribute names and
* string values.
*/
function MultipleSelectionTag($attributes) {
$this->SimpleWidget('select', $attributes);
$this->_options = array();
$this->_values = false;
}
/**
* Adds an option tag to a selection field.
* @param SimpleOptionTag $tag New option.
* @access public
*/
function addTag(&$tag) {
if ($tag->getTagName() == 'option') {
$this->_options[] = &$tag;
}
}
/**
* Text within the selection element is ignored.
* @param string $content Ignored.
* @access public
*/
function addContent($content) {
}
/**
* Scans options for defaults to populate the
* value array().
* @return array Selected fields.
* @access public
*/
function getDefault() {
$default = array();
for ($i = 0, $count = count($this->_options); $i < $count; $i++) {
if ($this->_options[$i]->getAttribute('selected') !== false) {
$default[] = $this->_options[$i]->getDefault();
}
}
return $default;
}
/**
* Can only set allowed values. Any illegal value
* will result in a failure, but all correct values
* will be set.
* @param array $desired New choices.
* @return boolean True if all allowed.
* @access public
*/
function setValue($desired) {
$achieved = array();
foreach ($desired as $value) {
$success = false;
for ($i = 0, $count = count($this->_options); $i < $count; $i++) {
if ($this->_options[$i]->isValue($value)) {
$achieved[] = $this->_options[$i]->getValue();
$success = true;
break;
}
}
if (! $success) {
return false;
}
}
$this->_values = $achieved;
return true;
}
/**
* Accessor for current selection value.
* @return array List of currently set options.
* @access public
*/
function getValue() {
if ($this->_values === false) {
return $this->getDefault();
}
return $this->_values;
}
}
/**
* Option for selection field.
* @package SimpleTest
* @subpackage WebTester
*/
class SimpleOptionTag extends SimpleWidget {
/**
* Stashes the attributes.
*/
function SimpleOptionTag($attributes) {
$this->SimpleWidget('option', $attributes);
}
/**
* Does nothing.
* @param string $value Ignored.
* @return boolean Not allowed.
* @access public
*/
function setValue($value) {
return false;
}
/**
* Test to see if a value matches the option.
* @param string $compare Value to compare with.
* @return boolean True if possible match.
* @access public
*/
function isValue($compare) {
$compare = trim($compare);
if (trim($this->getValue()) == $compare) {
return true;
}
return trim($this->getContent()) == $compare;
}
/**
* Accessor for starting value. Will be set to
* the option label if no value exists.
* @return string Parsed value.
* @access public
*/
function getDefault() {
if ($this->getAttribute('value') === false) {
return $this->getContent();
}
return $this->getAttribute('value');
}
/**
* The content of options is not part of the page.
* @return boolean True.
* @access public
*/
function isPrivateContent() {
return true;
}
}
/**
* Radio button.
* @package SimpleTest
* @subpackage WebTester
*/
class SimpleRadioButtonTag extends SimpleWidget {
/**
* Stashes the attributes.
* @param array $attributes Hash of attributes.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?