HTML-Object
view release on metacpan or search on metacpan
lib/HTML/Object/TokenList.pm view on Meta::CPAN
}
# Element attribute value takes precedence over us
else
{
return( $self->{items} = $self->_string2array( $elem_tokens ) );
}
}
return( $self->_set_get_array_as_object( 'items' ) );
}
}
sub keys { return; }
# Property
sub length { return( shift->items->length ); }
sub remove { return( shift->items->remove( _trim( @_ )->_reset ) ); }
sub replace
{
my $self = shift( @_ );
my $ok = $self->items->replace( @_ ) ? $self->true : $self->false;
$self->items->unique(1);
# Reset the associated element cache, if any.
$self->_reset;
return( $ok );
}
sub reset
{
my $self = shift( @_ );
$self->items->reset;
$self->tokens->reset;
$self->_reset;
return( $self );
}
sub supports { return( shift->true ); }
sub toggle
{
my $self = shift( @_ );
my $token = shift( @_ ) || return( $self->error( "No token was provided to toggle." ) );
$token = _trim( $token );
my $rv;
if( $self->items->has( $token ) )
{
$rv = $self->items->remove( $token ) ? $self->true : $self->false;
}
else
{
$self->items->push( $token );
$rv = $self->true;
}
$self->_reset;
return( $rv );
}
sub tokens { return( shift->_set_get_scalar_as_object( 'tokens', @_ ) ); }
sub update
{
my $self = shift( @_ );
if( scalar( @_ ) )
{
if( scalar( @_ ) == 1 && !defined( $_[0] ) )
{
$self->tokens->reset;
$self->items->reset;
}
else
{
my $items = $self->_string2array( @_ );
$self->tokens( $items->join( ' ' )->scalar );
$self->{items} = $items;
}
}
return( $self );
}
# Property
sub value { return( shift->as_string ); }
sub values { return; }
sub _reset
{
my $self = shift( @_ );
my $elem = $self->element;
my $tokens = $self->as_string;
$self->tokens( $tokens );
return( $self ) if( !ref( $elem ) );
my $attr = $self->attribute || return( $self );
$elem->attr( $attr => $tokens );
$elem->reset(1);
return( $self );
}
sub _string2array
{
my $self = shift( @_ );
my @tokens = ();
for( @_ )
{
if( $self->_is_array( $_ ) )
{
push( @tokens, @$_ );
}
# space-delimited tokens
else
{
push( @tokens, split( /[[:blank:]\h]+/, _trim( @_ ) ) );
}
}
return( $self->new_array( \@tokens )->unique(1) );
}
sub _trim
{
my $str = shift( @_ );
$str =~ s/^[[:blank:]\h]+|[[:blank:]\h]+$//g;
( run in 0.576 second using v1.01-cache-2.11-cpan-63c85eba8c4 )