Exemple #1
0
 /**
  * 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 . '/';
     });
 }
Exemple #2
0
 /**
  *	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;
 }