public function select($name, $list = [], $selected = null, $options = [])
 {
     if (is_arrayish($name)) {
         $name = keyVal('name', $name);
         $list = keyVal('list', $name, $list);
         $selected = keyVal('selected', $name, $selected);
         $options = keyVal('options', $name, $options);
     }
     $options = $this->cleanAttributes($options);
     $selected = $options['selected'] = $this->fieldValueTemplate($name);
     $options['name'] = keyVal('name', $options, $name);
     $options['data-selected'] = $selected;
     return parent::select($name, $list, $selected, $options);
 }
 public function mkInputFromDef($args = [])
 {
     $name = keyVal('name', $args);
     $value = keyVal('value', $args);
     $def = keyVal('def', $args);
     $type = 'text';
     $params = [];
     $options = [];
     #Parse $def - can be many forms
     if (is_string($def)) {
         $type = $def;
     } else {
         if (is_array($def)) {
             $type = keyVal('type', $def, keyVal(0, $def, 'text'));
             $params = keyVal('params', $def, keyVal(1, $def, $def));
             $options = keyVal('options', $params, $params);
         }
     }
     $inp = new PkHtmlRenderer();
     if ($type === 'select') {
         $list = keyVal('list', $params);
         unset($params['list']);
         return $inp->select($name, $list, $value, $options);
     } else {
         if ($type === 'textarea') {
             return $inp->textarea($name, $value, $options);
         } else {
             if ($type === 'boolean') {
                 return $inp->boolean($name, $value, $options);
             } else {
                 return $inp->input($type, $name, $value, $options);
             }
         }
     }
 }