/**
  * @param string type
  * @param $node
  * @return FormField
  */
 public function fieldFactory($type, $node)
 {
     // Instantiate a field object
     $field = new FormField(strtolower($type));
     // Get predifined attributes like id
     $attributes = $this->transpileAttributes($node->getNode(0), ['type', 'name', 'value']);
     $field->setAttributes($attributes);
     // Pattern validation callback
     if (array_key_exists('pattern', $attributes)) {
         $pattern = $attributes['pattern'];
         $field->setValidationCallback(function ($value) use($pattern, $field) {
             $validationResult = preg_match('/' . $pattern . '/', $value);
             if ($validationResult) {
                 return false;
                 // it's valid!
             }
             return true;
         });
     }
     // Add value
     $field->setDefault($node->attr('value'))->setName(str_replace('\\"', '', $node->attr('name')));
     // Set madatory if required
     if (array_key_exists('required', $attributes)) {
         $field->setMandatory(true);
     }
     return $field;
 }