X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDOM%2FTiny.pm;h=77e4d914aeda53d2214ccc55977d987b08a71abc;hb=2d9f516571abb22d42ea26ffaf07bda8a29314f0;hp=0d1636595a5e4eee2292a61c11cf011f14ea5d60;hpb=4c89d5f3f79080cc26a54c8697d3a7c091e6149a;p=catagits%2FDOM-Tiny.git diff --git a/lib/DOM/Tiny.pm b/lib/DOM/Tiny.pm index 0d16365..77e4d91 100644 --- a/lib/DOM/Tiny.pm +++ b/lib/DOM/Tiny.pm @@ -16,7 +16,7 @@ use DOM::Tiny::_CSS; use DOM::Tiny::_HTML; use Scalar::Util qw(blessed weaken); -our $VERSION = '0.001'; +our $VERSION = '0.002'; sub new { my $class = shift; @@ -153,7 +153,7 @@ sub tag { return $self; } -sub tap { shift->DOM::Tiny::_Collection::tap(@_) } +sub tap { DOM::Tiny::_Collection::tap(@_) } sub text { shift->_all_text(0, @_) } @@ -167,7 +167,8 @@ sub val { my $self = shift; # "option" - return $self->{value} // $self->text if (my $tag = $self->tag) eq 'option'; + return defined($self->{value}) ? $self->{value} : $self->text + if (my $tag = $self->tag) eq 'option'; # "textarea", "input" or "button" return $tag eq 'textarea' ? $self->text : $self->{value} if $tag ne 'select'; @@ -486,32 +487,34 @@ XML detection can also be disabled with the L method. L uses a CSS selector engine based on L. All CSS selectors that make sense for a standalone parser are supported. -=head2 * +=over + +=item Z<>* Any element. my $all = $dom->find('*'); -=head2 E +=item E An element of type C. my $title = $dom->at('title'); -=head2 E[foo] +=item E[foo] An C element with a C attribute. my $links = $dom->find('a[href]'); -=head2 E[foo="bar"] +=item E[foo="bar"] An C element whose C attribute value is exactly equal to C. my $case_sensitive = $dom->find('input[type="hidden"]'); my $case_sensitive = $dom->find('input[type=hidden]'); -=head2 E[foo="bar" i] +=item E[foo="bar" i] An C element whose C attribute value is exactly equal to any (ASCII-range) case-permutation of C. Note that this selector is @@ -525,7 +528,7 @@ This selector is part of L, which is still a work in progress. -=head2 E[foo~="bar"] +=item E[foo~="bar"] An C element whose C attribute value is a list of whitespace-separated values, one of which is exactly equal to C. @@ -533,7 +536,7 @@ values, one of which is exactly equal to C. my $foo = $dom->find('input[class~="foo"]'); my $foo = $dom->find('input[class~=foo]'); -=head2 E[foo^="bar"] +=item E[foo^="bar"] An C element whose C attribute value begins exactly with the string C. @@ -541,7 +544,7 @@ C. my $begins_with = $dom->find('input[name^="f"]'); my $begins_with = $dom->find('input[name^=f]'); -=head2 E[foo$="bar"] +=item E[foo$="bar"] An C element whose C attribute value ends exactly with the string C. @@ -549,20 +552,20 @@ C. my $ends_with = $dom->find('input[name$="o"]'); my $ends_with = $dom->find('input[name$=o]'); -=head2 E[foo*="bar"] +=item E[foo*="bar"] An C element whose C attribute value contains the substring C. my $contains = $dom->find('input[name*="fo"]'); my $contains = $dom->find('input[name*=fo]'); -=head2 E:root +=item E:root An C element, root of the document. my $root = $dom->at(':root'); -=head2 E:nth-child(n) +=item E:nth-child(n) An C element, the C child of its parent. @@ -571,7 +574,7 @@ An C element, the C child of its parent. my $even = $dom->find('div:nth-child(even)'); my $top3 = $dom->find('div:nth-child(-n+3)'); -=head2 E:nth-last-child(n) +=item E:nth-last-child(n) An C element, the C child of its parent, counting from the last one. @@ -580,7 +583,7 @@ An C element, the C child of its parent, counting from the last one. my $even = $dom->find('div:nth-last-child(even)'); my $bottom3 = $dom->find('div:nth-last-child(-n+3)'); -=head2 E:nth-of-type(n) +=item E:nth-of-type(n) An C element, the C sibling of its type. @@ -589,7 +592,7 @@ An C element, the C sibling of its type. my $even = $dom->find('div:nth-of-type(even)'); my $top3 = $dom->find('div:nth-of-type(-n+3)'); -=head2 E:nth-last-of-type(n) +=item E:nth-last-of-type(n) An C element, the C sibling of its type, counting from the last one. @@ -598,109 +601,111 @@ An C element, the C sibling of its type, counting from the last one. my $even = $dom->find('div:nth-last-of-type(even)'); my $bottom3 = $dom->find('div:nth-last-of-type(-n+3)'); -=head2 E:first-child +=item E:first-child An C element, first child of its parent. my $first = $dom->find('div p:first-child'); -=head2 E:last-child +=item E:last-child An C element, last child of its parent. my $last = $dom->find('div p:last-child'); -=head2 E:first-of-type +=item E:first-of-type An C element, first sibling of its type. my $first = $dom->find('div p:first-of-type'); -=head2 E:last-of-type +=item E:last-of-type An C element, last sibling of its type. my $last = $dom->find('div p:last-of-type'); -=head2 E:only-child +=item E:only-child An C element, only child of its parent. my $lonely = $dom->find('div p:only-child'); -=head2 E:only-of-type +=item E:only-of-type An C element, only sibling of its type. my $lonely = $dom->find('div p:only-of-type'); -=head2 E:empty +=item E:empty An C element that has no children (including text nodes). my $empty = $dom->find(':empty'); -=head2 E:checked +=item E:checked A user interface element C which is checked (for instance a radio-button or checkbox). my $input = $dom->find(':checked'); -=head2 E.warning +=item E.warning An C element whose class is "warning". my $warning = $dom->find('div.warning'); -=head2 E#myid +=item E#myid An C element with C equal to "myid". my $foo = $dom->at('div#foo'); -=head2 E:not(s) +=item E:not(s) An C element that does not match simple selector C. my $others = $dom->find('div p:not(:first-child)'); -=head2 E F +=item E F An C element descendant of an C element. my $headlines = $dom->find('div h1'); -=head2 E E F +=item E E F An C element child of an C element. my $headlines = $dom->find('html > body > div > h1'); -=head2 E + F +=item E + F An C element immediately preceded by an C element. my $second = $dom->find('h1 + h2'); -=head2 E ~ F +=item E ~ F An C element preceded by an C element. my $second = $dom->find('h1 ~ h2'); -=head2 E, F, G +=item E, F, G Elements of type C, C and C. my $headlines = $dom->find('h1, h2, h3'); -=head2 E[foo=bar][bar=baz] +=item E[foo=bar][bar=baz] An C element whose attributes match all following attribute selectors. my $links = $dom->find('a[foo^=b][foo$=ar]'); +=back + =head1 OPERATORS L overloads the following operators. @@ -1339,8 +1344,8 @@ passed to the callback and is also available as C<$_>. # Longer version my $first = $collection->first(sub { $_->$method(@args) }); - # Find first value that contains the word "dom" - my $interesting = $collection->first(qr/dom/i); + # Find first value that contains the word "tiny" + my $interesting = $collection->first(qr/tiny/i); # Find first value that is greater than 5 my $greater = $collection->first(sub { $_ > 5 }); @@ -1371,8 +1376,8 @@ C<$_>. # Longer version my $new = $collection->grep(sub { $_->$method(@args) }); - # Find all values that contain the word "dom" - my $interesting = $collection->grep(qr/dom/i); + # Find all values that contain the word "tiny" + my $interesting = $collection->grep(qr/tiny/i); # Find all values that are greater than 5 my $greater = $collection->grep(sub { $_ > 5 }); @@ -1406,8 +1411,8 @@ passed to the callback and is also available as C<$_>. # Longer version my $new = $collection->map(sub { $_->$method(@args) }); - # Append the word "dom" to all values - my $domified = $collection->map(sub { $_ . 'dom' }); + # Append the word "tiny" to all values + my $domified = $collection->map(sub { $_ . 'tiny' }); =head2 reduce @@ -1501,6 +1506,14 @@ Report any issues on the public bugtracker. Dan Book +=head1 CONTRIBUTORS + +=over + +=item Matt S Trout (mst) + +=back + =head1 COPYRIGHT AND LICENSE This software is Copyright (c) 2015 by Dan Book. @@ -1511,7 +1524,7 @@ This is free software, licensed under: =head1 SEE ALSO -L, L, L, L, L +L, L, L, L, L =for Pod::Coverage TO_JSON