input.php (3115B)
1 <?php 2 /** 3 * The abstract input field which is used for all <input> fields. 4 * 5 * @package Meta Box 6 */ 7 8 /** 9 * Abstract input field class. 10 */ 11 abstract class RWMB_Input_Field extends RWMB_Field { 12 /** 13 * Enqueue scripts and styles. 14 */ 15 public static function admin_enqueue_scripts() { 16 wp_enqueue_style( 'rwmb-input', RWMB_CSS_URL . 'input.css', '', RWMB_VER ); 17 } 18 19 /** 20 * Get field HTML. 21 * 22 * @param mixed $meta Meta value. 23 * @param array $field Field parameters. 24 * @return string 25 */ 26 public static function html( $meta, $field ) { 27 $output = ''; 28 29 if ( $field['prepend'] || $field['append'] ) { 30 $output = '<div class="rwmb-input-group">'; 31 } 32 33 if ( $field['prepend'] ) { 34 $output .= '<span class="rwmb-input-group-text">' . $field['prepend'] . '</span>'; 35 } 36 37 $attributes = self::call( 'get_attributes', $field, $meta ); 38 $output .= sprintf( '<input %s>%s', self::render_attributes( $attributes ), self::datalist( $field ) ); 39 40 if ( $field['append'] ) { 41 $output .= '<span class="rwmb-input-group-text">' . $field['append']. '</span>'; 42 } 43 44 if ( $field['prepend'] || $field['append'] ) { 45 $output .= '</div>'; 46 } 47 48 return $output; 49 } 50 51 /** 52 * Normalize parameters for field. 53 * 54 * @param array $field Field parameters. 55 * @return array 56 */ 57 public static function normalize( $field ) { 58 $field = parent::normalize( $field ); 59 $field = wp_parse_args( 60 $field, 61 array( 62 'autocomplete' => false, 63 'datalist' => false, 64 'readonly' => false, 65 'maxlength' => false, 66 'pattern' => false, 67 'prepend' => '', 68 'append' => '', 69 ) 70 ); 71 if ( $field['datalist'] ) { 72 $field['datalist'] = wp_parse_args( 73 $field['datalist'], 74 array( 75 'id' => $field['id'] . '_list', 76 'options' => array(), 77 ) 78 ); 79 } 80 return $field; 81 } 82 83 /** 84 * Get the attributes for a field. 85 * 86 * @param array $field Field parameters. 87 * @param mixed $value Meta value. 88 * @return array 89 */ 90 public static function get_attributes( $field, $value = null ) { 91 $attributes = parent::get_attributes( $field, $value ); 92 $attributes = wp_parse_args( 93 $attributes, 94 array( 95 'autocomplete' => $field['autocomplete'], 96 'list' => $field['datalist'] ? $field['datalist']['id'] : false, 97 'readonly' => $field['readonly'], 98 'maxlength' => $field['maxlength'], 99 'pattern' => $field['pattern'], 100 'value' => $value, 101 'placeholder' => $field['placeholder'], 102 'type' => $field['type'], 103 ) 104 ); 105 if ( isset( $field['size'] ) ) { 106 $attributes['size'] = $field['size']; 107 } 108 109 return $attributes; 110 } 111 112 /** 113 * Create datalist, if any. 114 * 115 * @param array $field Field parameters. 116 * @return string 117 */ 118 protected static function datalist( $field ) { 119 if ( empty( $field['datalist'] ) ) { 120 return ''; 121 } 122 123 $datalist = $field['datalist']; 124 $html = sprintf( '<datalist id="%s">', $datalist['id'] ); 125 foreach ( $datalist['options'] as $option ) { 126 $html .= sprintf( '<option value="%s"></option>', $option ); 127 } 128 $html .= '</datalist>'; 129 return $html; 130 } 131 }