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 )