/**
  * Encode method calls.
  *
  * @param MethodCall[] $methodCalls Method calls.
  * @param Encoder      $encoder     Javascript encoder.
  * @param null         $flags       Encoder flags.
  *
  * @return string
  */
 protected function encodeMethodCalls($methodCalls, Encoder $encoder, $flags = null)
 {
     $buffer = '';
     $flags = Flags::add(Flags::CLOSE_STATEMENT, $flags);
     foreach ($methodCalls as $call) {
         $buffer .= "\n" . $call->encode($encoder, $flags);
     }
     return $buffer;
 }
 /**
  * Encode an value and return it.
  *
  * @param mixed    $value  The value being encoded.
  * @param int|null $flags  Optional encoder flags.
  * @param Output   $output The output being generated.
  *
  * @return string
  */
 public function encode($value, $flags = Flags::CLOSE_STATEMENT, Output $output = null)
 {
     $factory = $this->encoderFactory;
     $output = $output ?: new Output();
     /** @var Encoder $encoder */
     $encoder = $factory($output);
     $flags = Flags::add($flags, $encoder->getFlags());
     $output->append($encoder->encodeValue($value, $flags));
     return $output->getBuffer();
 }
 /**
  * {@inheritdoc}
  */
 public function encodeReference($value)
 {
     if (!is_object($value)) {
         return null;
     }
     $hash = $this->hash($value);
     $encoder = $this->chain->getEncoder();
     if (!array_key_exists($hash, $this->references)) {
         $this->references[$hash] = $this->chain->next($this, __FUNCTION__, [$value]);
         if ($this->references[$hash] && !array_key_exists($hash, $this->values)) {
             $encoder->getOutput()->append($encoder->encodeObject($value, Flags::add(Flags::CLOSE_STATEMENT, $encoder->getFlags())));
         }
     }
     return $this->references[$hash];
 }
 /**
  * Check if given array is an numeric one.
  *
  * @param array    $data  The array being encoded.
  * @param int|null $flags Optional json encode flags.
  *
  * @return bool
  */
 private function isNumericArray(array $data, $flags)
 {
     if (Flags::contains(JSON_FORCE_OBJECT, $flags)) {
         return false;
     }
     foreach (array_keys($data) as $key) {
         if (!is_numeric($key)) {
             return false;
         }
     }
     return true;
 }
 /**
  * Encode the javascript representation of the object.
  *
  * @param Encoder  $encoder The javascript encoder.
  * @param int|null $flags   The encoding flags.
  *
  * @return string
  */
 public function encode(Encoder $encoder, $flags = null)
 {
     $options = get_object_vars($this);
     unset($options['formId']);
     $options = $this->removeEmptyOptions($options);
     if (!empty($options['fields'])) {
         foreach ($options['fields'] as $name => $value) {
             /** @var Field $value */
             $options['fields'][$name] = $value->getOptions();
         }
     }
     return sprintf('$(\'#%s\').formValidation(%s);', $this->getFormId(), $encoder->encodeArray($options, Flags::add(JSON_FORCE_OBJECT, $flags)));
 }