CSS-Prepare
view release on metacpan or search on metacpan
lib/CSS/Prepare/Property/UI.pm view on Meta::CPAN
$canonical{ $property } = $value;
}
else {
$type =~ s{_}{-}g;
push @errors, {
error => "invalid ${type} property: '${value}'"
};
}
};
&$valid_property_or_error( 'cursor' )
if 'cursor' eq $property;
&$valid_property_or_error( 'outline_width' )
if 'outline-width' eq $property;
&$valid_property_or_error( 'outline_style' )
if 'outline-style' eq $property;
&$valid_property_or_error( 'outline_colour' )
if 'outline-colour' eq $property
|| 'outline-color' eq $property;
lib/CSS/Prepare/Property/UI.pm view on Meta::CPAN
);
%canonical = validate_any_order_shorthand( $value, %types );
push @errors, {
error => "invalid outline property: '${value}'"
}
unless %canonical;
}
if ( defined $canonical{'cursor'} ) {
$canonical{'cursor'} = shorten_url_value(
$canonical{'cursor'},
$location,
$self,
);
}
return \%canonical, \@errors;
}
sub output {
my $self = shift;
my $block = shift;
lib/CSS/Prepare/Property/UI.pm view on Meta::CPAN
if ( 3 == scalar @outline ) {
my $value = join ' ', @shorthand;
push @output, sprintf $self->output_format, 'outline:', $value;
}
else {
push @output, @outline;
}
push @output,
sprintf( $self->output_format,
'cursor:', $block->{'cursor'},
)
if defined $block->{'cursor'};
return @output;
}
1;
lib/CSS/Prepare/Property/Values.pm view on Meta::CPAN
is_border_spacing_value
is_border_style_value
is_border_width_value
is_caption_side_value
is_clear_value
is_clip_value
is_colour_value
is_content_value
is_counter_increment_value
is_counter_reset_value
is_cursor_value
is_direction_value
is_display_value
is_empty_cells_value
is_float_value
is_font_family_value
is_font_size_line_height_value
is_font_size_value
is_font_style_value
is_font_variant_value
is_font_weight_value
lib/CSS/Prepare/Property/Values.pm view on Meta::CPAN
(?:
$counter_value
| $counter_value
(?: \s+ $counter_value )+
| none
| inherit
)
}x;
my $counter_reset_value = qr{ $counter_value_content }x;
my $counter_increment_value = qr{ $counter_value_content }x;
my $cursor_value = qr{
(?:
(?: $url_value \s+ )*
(?:
auto | crosshair | default | e-resize | help
| move | n-resize | ne-resize | nw-resize | pointer
| progress | s-resize | se-resize | sw-resize | text
| w-resize | wait
)
| inherit
)
lib/CSS/Prepare/Property/Values.pm view on Meta::CPAN
return $value =~ m{^ $content_value $}x;
}
sub is_counter_increment_value {
my $value = shift;
return $value =~ m{^ $counter_increment_value $}x;
}
sub is_counter_reset_value {
my $value = shift;
return $value =~ m{^ $counter_reset_value $}x;
}
sub is_cursor_value {
my $value = shift;
return $value =~ m{^ $cursor_value $}x;
}
sub is_direction_value {
my $value = shift;
return $value =~ m{^ $direction_value $}x;
}
sub is_display_value {
my $value = shift;
return $value =~ m{^ $display_value $}x;
}
sub is_empty_cells_value {
t/01.values.t view on Meta::CPAN
foreach my $value qw( visible hidden collapse inherit ) {
ok( is_visibility_value( $value ),
"visibility: '$value'" );
}
ok( ! is_visibility_value( 'invisible' ),
"not visibility: 'invisible'" );
}
# test user interface
{
my @cursors = qw(
auto crosshair default pointer move e-resize
ne-resize nw-resize n-resize se-resize sw-resize s-resize
w-resize text wait help progress
inherit
);
foreach my $value ( @cursors ) {
ok( is_cursor_value( $value ),
"cursor: '$value'" );
}
ok( is_cursor_value( 'url(blah.gif) crosshair' ),
"cursor: 'url(blah.gif) crosshair'" );
ok( ! is_cursor_value( 'url(blah.gif)' ),
"not cursor: 'url(blah.gif)'" );
ok( ! is_cursor_value( 'crosshair sw-resize' ),
"not cursor: 'crosshair sw-resize'" );
my @outline_style_values = qw(
none hidden dotted dashed solid
double groove ridge inset outset
inherit
);
foreach my $value ( @outline_style_values ) {
ok( is_outline_style_value( $value ),
"outline-style: '$value'" );
local $Data::Dumper::Useqq = 1;
local $Data::Dumper::Deparse = 1;
local $Data::Dumper::Quotekeys = 0;
local $Data::Dumper::Sortkeys = 1;
my $preparer = CSS::Prepare->new();
my( $css, @structure, @parsed );
# cursors
{
$css = <<CSS;
a { cursor: url( "blah.gif" ) crosshair; }
CSS
@structure = (
{
original => ' cursor: url( "blah.gif" ) crosshair; ',
errors => [],
selectors => [ 'a' ],
block => {
'cursor' => 'url(blah.gif) crosshair',
},
},
);
@parsed = $preparer->parse_string( $css );
is_deeply( \@structure, \@parsed )
or say "cursor was:\n" . Dumper \@parsed;
}
{
$css = <<CSS;
a { cursor: pointer crosshair; }
CSS
@structure = (
{
original => ' cursor: pointer crosshair; ',
errors => [
{
error => 'invalid cursor property: '
. q('pointer crosshair'),
},
],
selectors => [ 'a' ],
block => {},
},
);
@parsed = $preparer->parse_string( $css );
is_deeply( \@structure, \@parsed )
or say "cursor error was:\n" . Dumper \@parsed;
}
# outline-something properties
{
$css = <<CSS;
div { outline-width: thin; }
CSS
@structure = (
{
original => ' outline-width: thin; ',
use Test::More tests => 20;
use CSS::Prepare;
my $preparer_concise = CSS::Prepare->new();
my $preparer_pretty = CSS::Prepare->new( pretty => 1 );
my( $css, @structure, $output );
# cursors
{
@structure = (
{
selectors => [ 'a' ],
block => {
'cursor' => 'url(blah.gif) crosshair',
},
},
);
$css = <<CSS;
a{cursor:url(blah.gif) crosshair;}
CSS
$output = $preparer_concise->output_as_string( @structure );
ok( $output eq $css )
or say "cursor was:\n" . $output;
$css = <<CSS;
a {
cursor: url(blah.gif) crosshair;
}
CSS
$output = $preparer_pretty->output_as_string( @structure );
ok( $output eq $css )
or say "cursor was:\n" . $output;
}
# outline-something properties
{
$css = <<CSS;
div{outline-width:thin;}
CSS
@structure = (
{
selectors => [ 'div' ],
( run in 0.257 second using v1.01-cache-2.11-cpan-4d50c553e7e )