Example #1
0
 /**
  * @covers PhCompile\DOM\Utils::hasClass
  * @depends testAddClass
  */
 public function testHasClass()
 {
     $document = Utils::loadHTML('<span></span>');
     $element = $document->getElementsByTagName('span')->item(0);
     $this->assertFalse(Utils::hasClass($element, 'foo'));
     Utils::addClass($element, 'foo');
     $this->assertTrue(Utils::hasClass($element, 'foo'));
 }
Example #2
0
 /**
  * Renders AngularJS ng-show and ng-hide attributes by evaluating expression
  * inside them and setting "ng-hide" class if needed.
  *
  * @param \DOMElement $domElement DOM element to render.
  * @param Scope $scope Scope object containing data for expression.
  * @return \DOMElement Compiled DOM element.
  */
 public function compile(\DOMElement $domElement, Scope $scope)
 {
     $expressionString = $domElement->getAttribute('ng-show');
     /**
      * Get attribute expression's value.
      */
     $expression = new Expression($this->phCompile);
     $expressionValue = (bool) $expression->compile($expressionString, $scope);
     /**
      * Set appropriate class to DOM element if needed.
      */
     if ($expressionValue === false) {
         Utils::addClass($domElement, 'ng-hide');
     }
     return $domElement;
 }
Example #3
0
 /**
  * Compiles AngularJS ng-class attributes by evaluating expression inside it
  * and setting element's class attribute.
  *
  * @param \DOMElement $element DOM element to compile.
  * @param Scope $scope Scope object containing data for expression.
  * @return \DOMElement Compiled DOM element.
  */
 public function compile(\DOMElement $element, Scope $scope)
 {
     $classAttr = $element->getAttribute('ng-class');
     $classArray = $this->parseClass($classAttr);
     if (isset($classArray['object']) && $classArray['object'] !== '') {
         $classString = $this->compileObject($classAttr, $scope);
     } elseif (isset($classArray['array']) && $classArray['array'] !== '') {
         $classString = $this->compileArray($classAttr, $scope);
     } else {
         $classString = $this->compileString($classAttr, $scope);
     }
     if (empty($classString) === false && is_string($classString) === false) {
         throw new InvalidExpressionException(sprintf('Expression: "%s" inside ng-class does not evaluate to string!', $classAttr));
     }
     Utils::addClass($element, $classString);
     return $element;
 }
Example #4
0
 /**
  * Renders given DOM element as subtemplate.
  *
  * @param \DOMElement $domElement DOM element to subrender.
  * @param Scope $scope Subtemplate Scope object.
  * @return string Rendered HTML.
  */
 protected function subcompile(\DOMElement $domElement, $scope)
 {
     $template = new Template($this->phCompile);
     /**
      * Remove ng-repeat attribute so we won't fall into infinite loop while parsing.
      */
     $domElement->removeAttribute('ng-repeat');
     /**
      * Tag element with render class, for easy client-side JavaScript manipulation.
      */
     Utils::addClass($domElement, $this->phCompile->getConfig('compile.class'));
     $template->setHTML($domElement->ownerDocument->saveHTML($domElement));
     $template->setScope($scope);
     return $template->compile();
 }