/** * Returns the absolute path of the node. * @return string the absolute path of the node */ public function getPath() { return \arc\tree::parents($this, function ($node, $result) { return $result . $node->nodeName . '/'; }); }
/** * Calls each listener with the given event untill a listener returns false. */ private function walkListeners($event) { $callListeners = function ($listeners) use($event) { foreach ((array) $listeners as $listener) { $result = call_user_func($listener['method'], $event); if ($result === false) { return false; // this will stop \arc\path::walk, so other event handlers won't be called } } }; $result = \arc\tree::parents($this->tree, function ($node, $result) use($callListeners, $event) { if ($result !== false && isset($node->nodeValue['capture.' . $event->name])) { return call_user_func($callListeners, $node->nodeValue['capture.' . $event->name]); } }); if (!isset($result)) { $result = \arc\tree::dive($this->tree, function ($node) use($callListeners, $event) { if (isset($node->nodeValue['listen.' . $event->name])) { return call_user_func($callListeners, $node->nodeValue['listen.' . $event->name]); } }); } return !isset($result) ? true : false; }