CSS-Object
view release on metacpan or search on metacpan
lib/CSS/Object.pm view on Meta::CPAN
return( $self );
}
return( $self->error( "Only scalars and arrays accepted: $!" ) );
}
sub read_string
{
my $self = shift( @_ );
my $data = shift( @_ );
if( ref( $data ) )
{
if( ref( $data ) eq 'ARRAY' )
{
for( @$data )
{
$self->read_string( $_ ) || return( $self->pass_error );
}
return( $self );
}
}
elsif( length( $data ) )
{
my $elems = $self->parse_string( $data ) || return( $self->pass_error );
## $self->rules->push( @$rules );
$self->elements->push( @$elems );
}
return( $self );
}
sub remove_rule
{
my $self = shift( @_ );
my $rule = shift( @_ );
return( $self->error( "No rule object was provided to remove." ) ) if( !defined( $rule ) );
return( $self->error( "Object provided is not a CSS::Object::Rule object." ) ) if( !$self->_is_a( $rule, 'CSS::Object::Rule' ) );
$self->elements->remove( $rule );
return( $self );
}
# sub rules { return( shift->_set_get_array_as_object( 'rules', @_ ) ); }
sub rules { return( $_[0]->elements->map(sub{ $_[0]->_is_a( $_, 'CSS::Object::Rule' ) ? $_ : () }) ); }
1;
# NOTE POD
__END__
=encoding utf-8
=head1 NAME
CSS::Object - CSS Object Oriented
=head1 SYNOPSIS
use CSS::Object;
use LWP::UserAgent;
my $ua = LWP::UserAgent->new;
my $resp = $ua->get( $style_uri );
die( $resp->message ) if( $resp->is_error );
my $style = $resp->decoded_content;
my $css = CSS::Object->new;
$css->read_string( $style );
$css->rules->foreach(sub
{
my $rule = shift( @_ );
# more processing
});
or, parsing inline stylesheets from a remote document:
use HTML::Object;
use HTML::Object::XQuery;
use LWP::UserAgent;
my $ua = LWP::UserAgent->new;
my $resp = $ua->get( $document_uri );
die( $resp->message ) if( $resp->is_error );
my $html = $resp->decoded_content;
my $parser = HTML::Object->new;
my $doc = $parser->parse( $html ) || die( $parser->error );
my $styles = $doc->find( 'style' ) || die( $doc->error );
say "Nothing found", exit(0) unless( $styles->length > 0 );
my $data = $styles->children->first->text();
my $css = CSS::Object->new;
$css->read_string( $data );
$css->rules->foreach(sub
{
my $rule = shift( @_ );
# more processing
});
Creating dynamically rules:
use CSS::Object;
my $css = CSS::Object->new ||
die( CSS::Object->error );
my $b = $css->builder;
$b->select( ['#main_section > .article', 'section .article'] )
->display( 'none' )
->font_size( '+0.2rem' )
->comment( ['Some multiline comment', 'that are made possible with array reference'] )
->text_align( 'center' )
->comment( 'Making it look pretty' )
->padding( 5 );
$b->charset( 'UTF-8' );
$b->at( _webkit_keyframes => 'error' )
->frame( 0, { _webkit_transform => 'translateX( 0px )' })
->frame( 25, { _webkit_transform => 'translateX( 30px )' })
->frame( 45, { _webkit_transform => 'translateX( -30px )' })
->frame( 65, { _webkit_transform => 'translateX( 30px )' })
->frame( 82, { _webkit_transform => 'translateX( -30px )' })
->frame( 94, { _webkit_transform => 'translateX( 30px )' })
->frame( [qw( 35 55 75 87 97 100 )], { _webkit_transform => 'translateX( 0px )' } );
say $css->as_string;
=head1 VERSION
v0.2.0
=head1 DESCRIPTION
L<CSS::Object> is a object oriented CSS parser and manipulation interface.
=head1 CONSTRUCTOR
=head2 new
To instantiate a new L<CSS::Object> object, pass an hash reference of following parameters:
=over 4
=item I<debug>
This is an integer. The bigger it is and the more verbose is the output.
=item I<format>
This is a L<CSS::Object::Format> object or one of its child modules.
( run in 1.537 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )