MozRepl::Plugin::LinkExtor - Extract "a" and "link" elements.


MozRepl-Plugin-LinkTools documentation Contained in the MozRepl-Plugin-LinkTools distribution.

Index


Code Index:

NAME

Top

MozRepl::Plugin::LinkExtor - Extract "a" and "link" elements.

VERSION

Top

version 0.01

SYNOPSIS

Top

    use MozRepl;
    use Data::Dump qw(dump);

    my $repl = MozRepl->new;
    $repl->setup({ plugins => { plugins => [qw/JSON OpenNewTab LinkExtor/] } });

    $repl->open_new_tab({ url => "http://search.cpan.org/", selected => 1 });

    sleep(5);

    my $links = $repl->linkextor();

    print dump($links);

DESCRIPTION

Top

Add linkextor() method to MozRepl.

METHODS

Top

execute($ctx, $args)

$ctx

Context object. See MozRepl.

$args

Hash reference. See below detail.

all

Default 0. If this value is 1, then extracting links from all tabs.

AUTHOR

Top

Toru Yamaguchi, <zigorou@cpan.org>

BUGS

Top

Please report any bugs or feature requests to bug-mozrepl-plugin-linkextor@rt.cpan.org, or through the web interface at http://rt.cpan.org. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

COPYRIGHT & LICENSE

Top


MozRepl-Plugin-LinkTools documentation Contained in the MozRepl-Plugin-LinkTools distribution.
package MozRepl::Plugin::LinkExtor;

use strict;
use warnings;

use base qw(MozRepl::Plugin::Base);

use Carp::Clan qw(croak);
use JSON;

our $VERSION = '0.01';

sub execute {
    my ($self, $ctx, $args) = @_;

    croak("Please include MozRepl::Plugin::JSON") unless ($ctx->can("json"));

    my $params = {};

    $params->{repl} = $ctx->repl;
    $params->{all} = ($args->{all}) ? 'true' : 'false';

    my $command = $self->process('execute', $params);
    my $result = $ctx->execute($command);

    $result =~ s/^"//;
    $result =~ s/"$//;
    $result =~ s/\\"/"/g;

    return JSON->new(barekey => 1, quotapos => 1)->jsonToObj($result);
}

1; # End of MozRepl::Plugin::LinkExtor

__DATA__
__execute__
(function(all) {
  function documentLinksToJSON(cDocument) {
    function elementToJSON(element) {
      var result = {
        "nodeName": "",
        "attributes": {}
      };
      
      result.nodeName = element.nodeName;
      
      for (var i = 0, l = element.attributes.length; i < l; i++) {
        if ((/^on/i).test(element.attributes[i].nodeName)) {
          continue;
        }

        result.attributes[element.attributes[i].nodeName.toString()] = element.attributes[i].nodeValue;
      }
      
      return result;
    }
    
    var result = [];
    
    return result.concat(
                         Array.prototype.map.call(
                                                  cDocument.getElementsByTagName("link"),
                                                  elementToJSON
                                                  ),
                         Array.prototype.map.call(
                                                  cDocument.getElementsByTagName("a"),
                                                  elementToJSON
                                                  )
                         ).toSource();
  }

  if (all) {
    return JSONstring.make(Array.prototype.map.call(
        window.getBrowser().tabContainer.childNodes, 
        function(tab) {
            return documentLinksToJSON(tab.linkedBrowser.contentDocument);
        }
    ));
  }
  else {
    return JSONstring.make(documentLinksToJSON(window.getBrowser().contentDocument));
  }
})([% all %]);
__END__