Пример #1
0
 /**
  * @covers generateCss
  */
 public function testGenerateCss()
 {
     $env = new Context();
     $env->strictUnits = true;
     $output = new StandardOutput();
     $d = new DimensionNode('15', 'px');
     $d->generateCss($env, $output);
     $this->assertEquals('15px', $output->toString());
 }
Пример #2
0
 protected function doMinmax($isMin, $args)
 {
     switch (count($args)) {
         case 0:
             throw new CompilerException('One or more arguments required.');
     }
     $order = [];
     // elems only contains original argument values.
     $values = [];
     // key is the unit.toString() for unified tree.Dimension values,
     $unitClone = $unitStatic = $j = null;
     // value is the index into the order array.
     for ($i = 0; $i < count($args); $i++) {
         $current = $args[$i];
         if (!$current instanceof DimensionNode) {
             if (is_array($args[$i])) {
                 $args[] = $args[$i]->value;
             }
             continue;
         }
         if ($current->unit->toString() === '' && $unitClone !== null) {
             $dim = new DimensionNode($current->value, $unitClone);
             $currentUnified = $dim->unify();
         } else {
             $currentUnified = $current->unify();
         }
         $unit = $currentUnified->unit->toString() === '' && $unitStatic !== null ? $unitStatic : $currentUnified->unit->toString();
         // $unitStatic = $unit !== '' && $unitStatic === null || $unit !== '' && $order[0]->unify()->unit->toString() === '' ? $unit : $unitStatic;
         if ($unit !== '' && !$unitStatic || $unit !== '' && $order[0]->unify()->unit->toString() === '') {
             $unitStatic = $unit;
         }
         $unitClone = $unit !== '' && $unitClone === null ? $current->unit->toString() : $unitClone;
         if (isset($values['']) && $unit !== '' && $unit === $unitStatic) {
             $j = $values[''];
         } elseif (isset($values[$unit])) {
             $j = $values[$unit];
         } else {
             if ($unitStatic !== null && $unit !== $unitStatic) {
                 throw new RuntimeException(sprintf('Incompatible types "%s" and "%s" given', $unitStatic, $unit));
             }
             $values[$unit] = count($order);
             $order[] = $current;
             continue;
         }
         if ($order[$j]->unit->toString() === '' && $unitClone !== null) {
             $dim = new DimensionNode($order[$j]->value, $unitClone);
             $referenceUnified = $dim->unify();
         } else {
             $referenceUnified = $order[$j]->unify();
         }
         if ($isMin && $currentUnified->value < $referenceUnified->value || !$isMin && $currentUnified->value > $referenceUnified->value) {
             $order[$j] = $current;
         }
     }
     if (count($order) === 1) {
         return $order[0];
     }
     foreach ($order as $k => $a) {
         $order[$k] = $a->toCSS($this->context);
     }
     $args = implode($this->context->compress ? ',' : ', ', $order);
     return new AnonymousNode(($isMin ? 'min' : 'max') . '(' . $args . ')');
 }