—#!/usr/bin/perl
use
strict;
use
warnings;
use
JavaScript::XRay;
sub
FILENAME_INDEX {
return
-2 };
our
$VERSION
=
'0.03'
;
my
(
$verbose
,
$alias
,
$iframe_height
,
$css_external
);
my
(
$all
,
$none
,
$anon
,
@skip
,
@only
,
@uncomment
,
$no_exec_count
,
$match
);
# Stick any default switches at the beginning, so they can be overridden
# by the command line switches.
unshift
@ARGV
,
split
(
' '
,
$ENV
{JSXRAY_SWITCHES} )
if
defined
$ENV
{JSXRAY_SWITCHES};
Getopt::Long::Configure(
'no_ignore_case'
);
GetOptions(
'alias=s'
=> \
$alias
,
'iframe-height=s'
=> \
$iframe_height
,
'css-external=s'
=> \
$css_external
,
'h|help|?'
=>
sub
{ pod2usage( {
-verbose
=> 1 } );
exit
},
'H|man'
=>
sub
{ pod2usage( {
-verbose
=> 2 } );
exit
},
'v|verbose'
=> \
$verbose
,
'V|version'
=>
sub
{ print_version();
exit
; },
'all'
=> \
$all
,
'none'
=> \
$none
,
'anon'
=> \
$anon
,
'skip=s@'
=> \
@skip
,
'only=s@'
=> \
@only
,
'uncomment=s@'
=> \
@uncomment
,
'no-exec-count'
=> \
$no_exec_count
,
'match=s'
=> \
$match
,
) or
exit
1;
for
my
$file
(
@ARGV
) {
open
my
$fh
,
'<'
,
$file
or
die
"can't open $file: $!"
;
my
$html
=
do
{
local
$/ =
undef
; <
$fh
> };
close
$fh
;
my
$abs_uri
= rel2abs(
$file
);
my
$jsxray
= JavaScript::XRay->new(
abs_uri
=>
$abs_uri
,
alias
=>
$alias
,
iframe_height
=>
$iframe_height
,
css_external
=>
$css_external
,
verbose
=>
$verbose
,
);
$jsxray
->switches(
all
=>
$all
,
none
=>
$none
,
anon
=>
$anon
,
skip
=> \
@skip
,
only
=> \
@only
,
uncomment
=> \
@uncomment
,
no_exec_count
=>
$no_exec_count
,
match
=>
$match
,
);
my
$dir
= ( splitpath(
$abs_uri
) )[1];
$jsxray
->inline_methods(
'HTTP_GET'
,
$dir
);
# build new filename
my
(
$name
,
$path
) = fileparse(
$abs_uri
);
if
(
$name
=~ /[.]/) {
my
@parts
=
split
(/[.]/,
$name
);
$parts
[FILENAME_INDEX] .=
'-xrayed'
;
$name
=
join
(
'.'
,
@parts
);
}
else
{
$name
.=
'-xrayed'
;
}
my
$new_file
=
$path
.
$name
;
open
(
my
$output
,
'>'
,
$new_file
)
||
die
"Can't open file $new_file: $!"
;
$output
$jsxray
->filter(
$html
);
close
$output
;
$new_file
.
"\n"
;
}
sub
print_version {
printf
(
"jsxray v%s, using JavaScript::XRay v%s and Perl v%vd\n"
,
$VERSION
,
$JavaScript::XRay::VERSION
, $^V );
return
;
}
__END__
=head1 NAME
jsxray -- A command-line tool for filtering HTML with JavaScript::XRay
=head1 SYNOPSIS
jsxray [options] [files/directories]
Options:
-h, --help Display this help
-H, --man Longer manpage for jsxray
-v, --verbose Verbose output
-V, --version Display version info
--alias Alias used by JS::XRay to prefix all injected code
--iframe-height Height in pixels of logging iframe (default: 200)
--css-external Location of external CSS
--all Filter all functions (default)
--none Turn off filtering of functions
--anon Turn on logging of anonymous functions
--only Limit filtering to only these functions
--skip Skip filtering of these functions
--uncomment Uncomment these
--no-exec-count Don't keep track of execution counts
--match Filter functions that match string
Default options may be set by specifying the JSXRAY_SWITCHES environment
variable.
=head1 OVERVIEW
=head1 COMMAND LINE OPTIONS
=head2 --alias
Alias used by JS::XRay to prefix all injected code
=head2 --iframe-height
Height in pixels of logging iframe (default: 200)
=head2 --css-external
Location of external CSS
=head2 --all
Filter all functions (default)
=head2 --none
Turn off filtering of functions
=head2 --anon
Turn on logging of anonymous functions
=head2 --only
Limit filtering to only these functions
=head2 --skip
Skip filtering of these functions
=head2 --uncomment
Uncomment these
=head2 --no-exec-count
Don't keep track of execution counts
=head2 --match
Filter functions that match string
=head2 -v, --verbose
Verbose output
=head2 -V, --version
Display version info
=head2 -h, --help
Display short usage help
=head2 -H, --man
Manpage for jsxray
=head1 BUGS
Please report any bugs or feature requests to
C<bug-JavaScript-xray at rt.cpan.org>, or through the web interface at
I will be notified, and then you'll automatically be notified of progress on
your bug as I make changes.
=head1 SUPPORT
You can find documentation for this module with the perldoc command.
perldoc JavaScript::XRay
You can also look for information at:
=over 4
=item * AnnoCPAN: Annotated CPAN documentation
=item * CPAN Ratings
=item * RT: CPAN's request tracker
=item * Search CPAN
=back
=head1 ACKNOWLEDGEMENTS
Thanks to Andy Lester for 'prove', which I refernced to write my first
command line script for CPAN
=head1 COPYRIGHT & LICENSE
Copyright 2006 Jeff Bisbee, all rights reserved.
This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.