package HTML::FormHandler::Render::Util; # ABSTRACT: rendering utility $HTML::FormHandler::Render::Util::VERSION = '0.40068'; use Sub::Exporter; Sub::Exporter::setup_exporter({ exports => [ 'process_attrs', 'cc_widget', 'ucc_widget' ] } ); # this is a function for processing various attribute flavors sub process_attrs { my ($attrs) = @_; my @use_attrs; my $javascript = delete $attrs->{javascript} || ''; for my $attr( sort keys %$attrs ) { my $value = ''; if( defined $attrs->{$attr} ) { if( ref $attrs->{$attr} eq 'ARRAY' ) { # we don't want class="" if no classes specified next unless scalar @{$attrs->{$attr}}; $value = join (' ', @{$attrs->{$attr}} ); } else { $value = $attrs->{$attr}; } } push @use_attrs, sprintf( '%s="%s"', $attr, $value ); } my $output = join( ' ', @use_attrs ); $output = " $output" if length $output; $output .= " $javascript" if $javascript; return $output; } sub cc_widget { my $widget = shift; return '' unless $widget; if($widget eq lc $widget) { $widget =~ s/^(\w{1})/\u$1/g; $widget =~ s/_(\w{1})/\u$1/g; } return $widget; } sub ucc_widget { my $widget = shift; if($widget ne lc $widget) { $widget =~ s/::/_/g; $widget = ucfirst($widget); my @parts = $widget =~ /([A-Z][a-z]*)/g; $widget = join('_', @parts); $widget = lc($widget); } return $widget; } 1; __END__ =pod =encoding UTF-8 =head1 NAME HTML::FormHandler::Render::Util - rendering utility =head1 VERSION version 0.40068 =head1 SYNOPSIS The 'process_attrs' takes a hashref and creates an attribute string for constructing HTML. my $attrs => { some_attr => 1, placeholder => 'Enter email...", class => ['help', 'special'], }; my $string = process_attrs($attrs); ...will produce: ' some_attr="1" placeholder="Enter email..." class="help special"' If an arrayref is empty, it will be skipped. For a hash key of 'javascript' only the value will be appended (without '$key=""'); =head1 AUTHOR FormHandler Contributors - see HTML::FormHandler =head1 COPYRIGHT AND LICENSE This software is copyright (c) 2017 by Gerda Shank. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. =cut