diff --git a/lib/WebGUI/Form/DataTable.pm b/lib/WebGUI/Form/DataTable.pm index 6e9c9a5ef..e6fee2023 100644 --- a/lib/WebGUI/Form/DataTable.pm +++ b/lib/WebGUI/Form/DataTable.pm @@ -71,29 +71,19 @@ displaying the table with getValueAsHtml(). =cut sub definition { - my $class = shift; - my $session = shift; - my $definition = shift || []; + my $class = shift; + my $session = shift; + my $definition = shift || []; push @{$definition}, { - showEdit => { - defaultValue => 0, - }, - ajaxDataUrl => { - defaultValue => undef, - }, - ajaxSaveUrl => { - defaultValue => undef, - }, - ajaxSaveFunc => { - defaultValue => "view", - }, - ajaxSaveExtras => { - defaultValue => undef, - }, - }; - - return $class->SUPER::definition($session, $definition); + showEdit => { defaultValue => 0, }, + ajaxDataUrl => { defaultValue => undef, }, + ajaxSaveUrl => { defaultValue => undef, }, + ajaxSaveFunc => { defaultValue => "view", }, + ajaxSaveExtras => { defaultValue => undef, }, + }; + + return $class->SUPER::definition( $session, $definition ); } #------------------------------------------------------------------- @@ -105,77 +95,78 @@ Render the DataTable =cut sub getDataTableHtml { - my $self = shift; + my $self = shift; $self->prepare unless $self->{_prepared}; - my $data = JSON->new->decode( $self->getOriginalValue ); - my $id = $self->get( 'id' ); + my $data = JSON->new->decode( $self->getOriginalValue ); + my $id = $self->get('id'); # Get the HTML for the table - my $html = $self->getTableHtml( $data ); - + my $html = $self->getTableHtml($data); + ### Prepare the columns data - my %parsers = ( - date => "YAHOO.util.DataSource.parseDate", - number => "YAHOO.util.DataSource.parseNumber", + my %parsers = ( + date => "YAHOO.util.DataSource.parseDate", + number => "YAHOO.util.DataSource.parseNumber", ); - my %editors = ( - date => "date", - textbox => "textbox", + my %editors = ( + date => "date", + textbox => "textbox", ); - + my @columnsJson = (); - for my $column ( @{ $data->{ columns } } ) { + for my $column ( @{ $data->{columns} } ) { + # Not using a datastructure and JSON.pm because of function references for "parser" - my $columnDef = '{' - . qq{"key" : "$column->{ key }", } - . qq{"abbr" : "$column->{ key }", } - . qq{"formatter" : "$column->{ formatter }", } - . qq{"resizable" : 1, } - . qq{"sortable" : 1} - ; + my $columnDef + = '{' + . qq["key" : "$column->{ key }", ] + . qq["abbr" : "$column->{ key }", ] + . qq["formatter" : "$column->{ formatter }", ] + . qq["resizable" : 1, ] + . qq["sortable" : 1]; # Automatically determine the parser to use - if ( $parsers{ $column->{ formatter } } ) { - $columnDef .= qq{, "parser" : $parsers{ $column->{ formatter } }}; - }; + if ( $parsers{ $column->{formatter} } ) { + $columnDef .= qq{, "parser" : $parsers{ $column->{ formatter } }}; + } # If we can edit - if ( $self->get( 'showEdit' ) ) { + if ( $self->get('showEdit') ) { + # Set the editor - my $editor = $editors{ $column->{ formatter } } - || $editors{ "textbox" } - ; - $columnDef .= qq{, "editor" : "$editor"}; + my $editor = $editors{ $column->{formatter} } + || $editors{"textbox"}; + $columnDef .= qq{, "editor" : "$editor"}; } - $columnDef .= '}'; + $columnDef .= '}'; push @columnsJson, $columnDef; - } + } ## end for my $column ( @{ $data... my $columnsJson = "[" . join( ",", @columnsJson ) . "]"; - + ### Prepare any options - my $options = { - "showEdit" => $self->get( 'showEdit' ), - "inputName" => $self->get( 'name' ), - "ajaxDataUrl" => $self->get( 'ajaxDataUrl' ), - "ajaxDataFunc" => $self->get( 'ajaxDataFunc' ), - "ajaxSaveUrl" => $self->get( 'ajaxSaveUrl' ), - "ajaxSaveFunc" => $self->get( 'ajaxSaveFunc' ), + my $options = { + "showEdit" => $self->get('showEdit'), + "inputName" => $self->get('name'), + "ajaxDataUrl" => $self->get('ajaxDataUrl'), + "ajaxDataFunc" => $self->get('ajaxDataFunc'), + "ajaxSaveUrl" => $self->get('ajaxSaveUrl'), + "ajaxSaveFunc" => $self->get('ajaxSaveFunc'), }; - my $optionsJson = JSON->new->encode( $options ); + my $optionsJson = JSON->new->encode($options); # Progressively enhance the bejesus out of it - $html .= <<"ENDJS"; + $html .= <<"ENDJS"; ENDJS return $html; -} +} ## end sub getDataTableHtml #------------------------------------------------------------------- @@ -187,29 +178,23 @@ data structure. =cut sub getDefaultValue { - my $self = shift; - my $value = $self->SUPER::getDefaultValue( @_ ); + my $self = shift; + my $value = $self->SUPER::getDefaultValue(@_); if ( !$value ) { - $value = JSON->new->encode( - { - columns => [ - { - key => "New Column", - formatter => "text", - }, - ], - rows => [ - { - "New Column" => "Value", + $value = JSON->new->encode( { + columns => [ { + key => "New Column", + formatter => "text", }, ], + rows => [ { "New Column" => "Value", }, ], } ); } return $value; -} +} ## end sub getDefaultValue #------------------------------------------------------------------- @@ -220,8 +205,8 @@ Returns the name of the form control. =cut sub getName { - my ($class, $session) = @_; - return WebGUI::International->new($session, "Form_DataTable")->get("topicName"); + my ( $class, $session ) = @_; + return WebGUI::International->new( $session, "Form_DataTable" )->get("topicName"); } #------------------------------------------------------------------- @@ -233,11 +218,11 @@ Get the original value, or the default value. =cut sub getOriginalValue { - my $self = shift; - my $value = $self->SUPER::getOriginalValue( @_ ); + my $self = shift; + my $value = $self->SUPER::getOriginalValue(@_); if ( !$value ) { - $value = $self->getDefaultValue; + $value = $self->getDefaultValue; } return $value; @@ -275,14 +260,14 @@ structure. =cut sub getValue { - my $self = shift; - my $value = $self->SUPER::getValue(@_); - + my $self = shift; + my $value = $self->SUPER::getValue(@_); + # If passing in a data structure, encode to JSON if ( ref $value eq "HASH" ) { - $value = JSON->new->encode( $value ); + $value = JSON->new->encode($value); } - + return $value; } @@ -295,7 +280,7 @@ Get the value as HTML. Render the datatable in a non-editable form. =cut sub getValueAsHtml { - my $self = shift; + my $self = shift; return $self->getDataTableHtml; } @@ -309,44 +294,44 @@ columns and rows to render. =cut sub getTableHtml { - my $self = shift; - my $data = shift; + my $self = shift; + my $data = shift; - my $html = '
| ' . $column->{ key } . ' | '; + for my $column ( @{ $data->{columns} } ) { + $html .= '' . $column->{key} . ' | '; } - + # TODO: Add table footer - $html .= '
|---|---|
| ' . $row->{ $column->{ key } } . ' | '; + for my $column ( @{ $data->{columns} } ) { + $html .= '' . $row->{ $column->{key} } . ' | '; } - $html .= '