type = $type; $this->attributes = $attributes; } /** * Type of this element * * @return string */ public function getType() { return $this->type; } /** * Gets or sets an attribute * * When no $value is given, the current content of the attribute is returned. * An empty string is returned for unset attributes. * * When a $value is given, the content is set to that value and the Element * itself is returned for easy chaining * * @param string $name Name of the attribute to access * @param null|string $value New value to set * @return string|$this */ public function attr($name, $value = null) { // set if ($value !== null) { $this->attributes[$name] = $value; return $this; } // get if (isset($this->attributes[$name])) { return $this->attributes[$name]; } else { return ''; } } /** * Removes the given attribute if it exists * * @param string $name * @return $this */ public function rmattr($name) { if (isset($this->attributes[$name])) { unset($this->attributes[$name]); } return $this; } /** * Gets or adds a all given attributes at once * * @param array|null $attributes * @return array|$this */ public function attrs($attributes = null) { // set if ($attributes) { foreach ((array) $attributes as $key => $val) { $this->attr($key, $val); } return $this; } // get return $this->attributes; } /** * Adds a class to the class attribute * * This is the preferred method of setting the element's class * * @param string $class the new class to add * @return $this */ public function addClass($class) { $classes = explode(' ', $this->attr('class')); $classes[] = $class; $classes = array_unique($classes); $classes = array_filter($classes); $this->attr('class', implode(' ', $classes)); return $this; } /** * Get or set the element's ID * * This is the preferred way of setting the element's ID * * @param null|string $id * @return string|$this */ public function id($id = null) { if (strpos($id, '__') === false) { throw new \InvalidArgumentException('IDs in DokuWiki have to contain two subsequent underscores'); } return $this->attr('id', $id); } /** * Get or set the element's value * * This is the preferred way of setting the element's value * * @param null|string $value * @return string|$this */ public function val($value = null) { return $this->attr('value', $value); } /** * The HTML representation of this element * * @return string */ abstract public function toHTML(); }