original_string: protected function runAjaxHandler($handler)
      {
          /**
           * @event cms.ajax.beforeRunHandler
           * Provides an opportunity to modify an AJAX request
           *
           * The parameter provided is `$handler` (the requested AJAX handler to be run)
           *
           * Example usage (forwards AJAX handlers to a backend widget):
           *
           *     Event::listen('cms.ajax.beforeRunHandler', function((\Cms\Classes\Controller) $controller, (string) $handler) {
           *         if (strpos($handler, '::')) {
           *             list($componentAlias, $handlerName) = explode('::', $handler);
           *             if ($componentAlias === $this->getBackendWidgetAlias()) {
           *                 return $this->backendControllerProxy->runAjaxHandler($handler);
           *             }
           *         }
           *     });
           *
           * Or
           *
           *     $this->controller->bindEvent('ajax.beforeRunHandler', function ((string) $handler) {
           *         if (strpos($handler, '::')) {
           *             list($componentAlias, $handlerName) = explode('::', $handler);
           *             if ($componentAlias === $this->getBackendWidgetAlias()) {
           *                 return $this->backendControllerProxy->runAjaxHandler($handler);
           *             }
           *         }
           *     });
           *
           */
          if ($event = $this->fireSystemEvent('cms.ajax.beforeRunHandler', [$handler])) {
              return $event;
          }
  
          /*
           * Process Component handler
           */
          if (strpos($handler, '::')) {
  
              list($componentName, $handlerName) = explode('::', $handler);
              $componentObj = $this->findComponentByName($componentName);
  
              if ($componentObj && $componentObj->methodExists($handlerName)) {
                  $this->componentContext = $componentObj;
                  $result = $componentObj->runAjaxHandler($handlerName);
                  return $result ?: true;
              }
          }
          /*
           * Process code section handler
           */
          else {
              if (method_exists($this->pageObj, $handler)) {
                  $result = $this->pageObj->$handler();
                  return $result ?: true;
              }
  
              if (!$this->layout->isFallBack() && method_exists($this->layoutObj, $handler)) {
                  $result = $this->layoutObj->$handler();
                  return $result ?: true;
              }
  
              /*
               * Cycle each component to locate a usable handler
               */
              if (($componentObj = $this->findComponentByHandler($handler)) !== null) {
                  $this->componentContext = $componentObj;
                  $result = $componentObj->runAjaxHandler($handler);
                  return $result ?: true;
              }
          }
  
          /*
           * Generic handler that does nothing
           */
          if ($handler == 'onAjax') {
              return true;
          }
  
          return false;
      }
code: protected function runAjaxHandler($handler)
      {
          /**
           * @event cms.ajax.beforeRunHandler
           * Provides an opportunity to modify an AJAX request
           *
           * The parameter provided is `$handler` (the requested AJAX handler to be run)
           *
           * Example usage (forwards AJAX handlers to a backend widget):
           *
           *     Event::listen('cms.ajax.beforeRunHandler', function((\Cms\Classes\Controller) $controller, (string) $handler) {
           *         if (strpos($handler, '::')) {
           *             list($componentAlias, $handlerName) = explode('::', $handler);
           *             if ($componentAlias === $this->getBackendWidgetAlias()) {
           *                 return $this->backendControllerProxy->runAjaxHandler($handler);
           *             }
           *         }
           *     });
           *
           * Or
           *
           *     $this->controller->bindEvent('ajax.beforeRunHandler', function ((string) $handler) {
           *         if (strpos($handler, '::')) {
           *             list($componentAlias, $handlerName) = explode('::', $handler);
           *             if ($componentAlias === $this->getBackendWidgetAlias()) {
           *                 return $this->backendControllerProxy->runAjaxHandler($handler);
           *             }
           *         }
           *     });
           *
           */
          if ($event = $this->fireSystemEvent('cms.ajax.beforeRunHandler', [$handler])) {
              return $event;
          }
  
          /*
           * Process Component handler
           */
          if (strpos($handler, '::')) {
  
              list($componentName, $handlerName) = explode('::', $handler);
              $componentObj = $this->findComponentByName($componentName);
  
              if ($componentObj && $componentObj->methodExists($handlerName)) {
                  $this->componentContext = $componentObj;
                  $result = $componentObj->runAjaxHandler($handlerName);
                  return $result ?: true;
              }
          }
          /*
           * Process code section handler
           */
          else {
              if (method_exists($this->pageObj, $handler)) {
                  $result = $this->pageObj->$handler();
                  return $result ?: true;
              }
  
              if (!$this->layout->isFallBack() && method_exists($this->layoutObj, $handler)) {
                  $result = $this->layoutObj->$handler();
                  return $result ?: true;
              }
  
              /*
               * Cycle each component to locate a usable handler
               */
              if (($componentObj = $this->findComponentByHandler($handler)) !== null) {
                  $this->componentContext = $componentObj;
                  $result = $componentObj->runAjaxHandler($handler);
                  return $result ?: true;
              }
          }
  
          /*
           * Generic handler that does nothing
           */
          if ($handler == 'onAjax') {
              return true;
          }
  
          return false;
      }
code_tokens: protected function runAjaxHandler ( $ handler ) { /**
           * @event cms.ajax.beforeRunHandler
           * Provides an opportunity to modify an AJAX request
           *
           * The parameter provided is `$handler` (the requested AJAX handler to be run)
           *
           * Example usage (forwards AJAX handlers to a backend widget):
           *
           *     Event::listen('cms.ajax.beforeRunHandler', function((\Cms\Classes\Controller) $controller, (string) $handler) {
           *         if (strpos($handler, '::')) {
           *             list($componentAlias, $handlerName) = explode('::', $handler);
           *             if ($componentAlias === $this->getBackendWidgetAlias()) {
           *                 return $this->backendControllerProxy->runAjaxHandler($handler);
           *             }
           *         }
           *     });
           *
           * Or
           *
           *     $this->controller->bindEvent('ajax.beforeRunHandler', function ((string) $handler) {
           *         if (strpos($handler, '::')) {
           *             list($componentAlias, $handlerName) = explode('::', $handler);
           *             if ($componentAlias === $this->getBackendWidgetAlias()) {
           *                 return $this->backendControllerProxy->runAjaxHandler($handler);
           *             }
           *         }
           *     });
           *
           */ if ( $ event = $ this -> fireSystemEvent ( 'cms.ajax.beforeRunHandler' , [ $ handler ] ) ) { return $ event ; } /*
           * Process Component handler
           */ if ( strpos ( $ handler , '::' ) ) { list ( $ componentName , $ handlerName ) = explode ( '::' , $ handler ) ; $ componentObj = $ this -> findComponentByName ( $ componentName ) ; if ( $ componentObj && $ componentObj -> methodExists ( $ handlerName ) ) { $ this -> componentContext = $ componentObj ; $ result = $ componentObj -> runAjaxHandler ( $ handlerName ) ; return $ result ? : true ; } } /*
           * Process code section handler
           */ else { if ( method_exists ( $ this -> pageObj , $ handler ) ) { $ result = $ this -> pageObj -> $ handler ( ) ; return $ result ? : true ; } if ( ! $ this -> layout -> isFallBack ( ) && method_exists ( $ this -> layoutObj , $ handler ) ) { $ result = $ this -> layoutObj -> $ handler ( ) ; return $ result ? : true ; } /*
               * Cycle each component to locate a usable handler
               */ if ( ( $ componentObj = $ this -> findComponentByHandler ( $ handler ) ) !== null ) { $ this -> componentContext = $ componentObj ; $ result = $ componentObj -> runAjaxHandler ( $ handler ) ; return $ result ? : true ; } } /*
           * Generic handler that does nothing
           */ if ( $ handler == 'onAjax' ) { return true ; } return false ; }
docstring: Tries to find and run an AJAX handler in the page, layout, components and plugins.
  The method stops as soon as the handler is found.
  @param string $handler name of the ajax handler
  @return boolean Returns true if the handler was found. Returns false otherwise.
docstring_tokens: Tries to find and run an AJAX handler in the page layout components and plugins . The method stops as soon as the handler is found .