diff --git a/changelog.txt b/changelog.txt index c98f112ae03369bab5a71c8e2454cfe439401f4d..6b6532c4595af1b0d63b7f7965c6f1d0e00d7526 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,5 +1,9 @@ # Changelog +## [2.0.3] - 2020-06-22 +### Added +- css class in JSON renderer + ## 2.0.2 - 2020-06-17 ### Changed - Skip saving empty keys in the PersistentContainer diff --git a/src/Field.php b/src/Field.php index e3a26e94326ac2ff8dd0b42da0cbe702a27ce41a..458bb386815097e0262bff46d4c8fcbdd0fd1f03 100644 --- a/src/Field.php +++ b/src/Field.php @@ -2,6 +2,8 @@ namespace WPDesk\Forms; +use WPDesk\Forms\Field\BasicField; + /** * The idea is that from the moment the factory returns this interface it's values cannot be changed. * And that is why here are only the getters. @@ -116,6 +118,29 @@ interface Field { /** @return bool */ public function is_class_set( $name ); + /** bool */ + public function has_data(); + + /** + * @return array + */ + public function get_data(); + + /** + * @param string $data_name + * @param string $data_value + * + * @return $this + */ + public function add_data( $data_name, $data_value ); + + /** + * @param string $data_name + * + * @return $this + */ + public function unset_data( $data_name ); + /** * @return mixed */ diff --git a/src/Field/BasicField.php b/src/Field/BasicField.php index 02004ff3148c313352a7d34173cd555c49fb5478..8bd59511a674d4efbcfde0192f5b6de185d146fd 100644 --- a/src/Field/BasicField.php +++ b/src/Field/BasicField.php @@ -137,6 +137,17 @@ abstract class BasicField implements Field { return ! empty( $this->meta['class'] ); } + public function has_data() { + return ! empty( $this->meta['data'] ); + } + + /** + * @return array + */ + public function get_data() { + return empty( $this->meta['data'] ) ? [] : $this->meta['data']; + } + public function get_possible_values() { return isset( $this->meta['possible_values'] ) ? $this->meta['possible_values'] : []; } @@ -210,6 +221,32 @@ abstract class BasicField implements Field { return $this; } + /** + * @param string $data_name + * @param string $data_value + * + * @return $this + */ + public function add_data( $data_name, $data_value ) { + if ( !isset( $this->meta['data'] ) ) { + $this->meta['data'] = []; + } + $this->meta['data'][ $data_name ] = $data_value; + + return $this; + } + + /** + * @param string $data_name + * + * @return $this + */ + public function unset_data( $data_name ) { + unset( $this->meta['data'][ $data_name ] ); + + return $this; + } + /** * @param $name * @param $value diff --git a/src/Renderer/JsonNormalizedRenderer.php b/src/Renderer/JsonNormalizedRenderer.php index 175fe70cbab72312a118f294ed419b09d5bd0c0f..2f0c1c379897a4f708bcd338c0c6dba95ee676ac 100644 --- a/src/Renderer/JsonNormalizedRenderer.php +++ b/src/Renderer/JsonNormalizedRenderer.php @@ -32,6 +32,9 @@ class JsonNormalizedRenderer implements FieldRenderer { 'value ' => isset( $fields_data[ $field->get_name() ] ) ? $fields_data[ $field->get_name() ] : $field->get_default_value() ]; + if ( $field->has_classes() ) { + $rendered['class'] = $field->get_classes(); + } if ( $field->has_description() ) { $rendered['description'] = $field->get_description(); } @@ -45,6 +48,17 @@ class JsonNormalizedRenderer implements FieldRenderer { if ( $options ) { $rendered['options'] = $options; } + if ( $field->has_data() ) { + $data = $field->get_data(); + $rendered['data'] = []; + foreach ( $data as $data_name => $data_value ) { + $rendered['data'][] = [ + 'name' => $data_name, + 'value' => $data_value, + ]; + } + } + $rendered_fields[] = $rendered; }