/** * copy element including content, wai, attributes * * $a = Element::create('a')->attr('href', 'http://google.de')->attr('id', 'google-link')->wai('role', 'button') * ->content($span = Element::create('span')->content('link')); * * $copy = $a->copy(Element::COPY_WAI | Element::COPY_CONTENT); * * $span->content = 'Gooooooooooooooogle'; * * var_dump($a->render(), $copy->render()); * string(94) "Gooooooooooooooogle" * string(38) "link" * */ public function copy($__flag) { static $__STATIC_map; isset($__STATIC_map) ?: $__STATIC_map = function($__value) { return is_object($__value) ? clone $__value : $__value; }; $Copy = new $this; $Copy->__Element = new $this->__Element ( #! copy ADT attribute/wai/content $this->__Element->getTupleGC([__type_Element::parent, __type_Element::attribute, __type_Element::wai]), #! clone or create empty __type_Element sub tuple [ __type_Element::attribute => self::COPY_ATTR === ($__flag & self::COPY_ATTR) ? clone $this->__Element->get()[__type_Element::attribute] : Invoke::emitClass($this->__ElementSetup[__type_Element::attribute]), __type_Element::wai => self::COPY_WAI === ($__flag & self::COPY_WAI) ? clone $this->__Element->get()[__type_Element::wai] : Invoke::emitClass($this->__ElementSetup[__type_Element::wai]), __type_Element::content => Invoke::emitClass($this->__ElementSetup[__type_Element::content], [static::$__tContent, self::COPY_CONTENT === ($__flag & self::COPY_CONTENT) ? FsbCollection::fromArray($this->__Element->get()[__type_Element::content]->get())->map($__STATIC_map, ['collect' => FALSE]) : []]) ] #! use element defaults + $this->__ElementSetup ); return $Copy; }