MozRepl::Plugin::JSON - To JSON string plugin.


MozRepl documentation Contained in the MozRepl distribution.

Index


Code Index:

NAME

Top

MozRepl::Plugin::JSON - To JSON string plugin.

VERSION

Top

version 0.04

SYNOPSYS

Top

    use MozRepl;
    use MozRepl::Util;

    my $repl = MozRepl->new;
    $repl->setup({ plugins => { plugins => [qw/JSON/] } });
    print $repl->json({ source => MozRepl::Util->javascript_value({foo => 1, bar => 2}) });

DESCRIPTION

Top

Add json() method to MozRepl.

METHODS

Top

setup($ctx, $args)

Load script at http://www.thomasfrank.se/downloadableJS/jsonStringify.js

execute($ctx, $args)

$ctx

Context object. See MozRepl.

$args

Hash reference.

source

Source string. If you want to JavaScript literal, then use MozRepl::Util->javascript_value() method. See javascript_value($value) in MozRepl::Util.

SEE ALSO

Top

MozRepl::Plugin::Base
MozRepl::Util
Data::JavaScript::Anon
JavaScript::Minifier
http://www.thomasfrank.se/downloadableJS/jsonStringify.js

AUTHOR

Top

Toru Yamaguchi, <zigorou@cpan.org>

BUGS

Top

Please report any bugs or feature requests to bug-mozrepl-plugin-json@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 documentation Contained in the MozRepl distribution.
package MozRepl::Plugin::JSON;

use strict;
use warnings;

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

use Carp::Clan qw(croak);

our $VERSION = '0.04';

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

    $ctx->execute($self->process('setup', { repl => $ctx->repl }));
}

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

    my $cmd = $self->process('execute', { repl => $ctx->repl, source => $args->{source} });
    my @result = $ctx->execute($cmd);

    if ($result[$#result - 1] =~ /\!{3} InternalError: /) { ### recursive error
        $ctx->log->debug($result[$#result - 1]);

        croak($result[$#result - 1]);
    }

    return join("", @result);
}

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

__DATA__
__execute__
JSONstring.make([% source %]);
__setup__
JSONstring={compactOutput:false,includeProtos:false,includeFunctions:false,detectCirculars:true,restoreCirculars:true,make:function(arg,restore){this.restore=restore;this.mem=[];this.pathMem=[];return this.toJsonStringArray(arg).join('');},toObject:function(x){eval("this.myObj="+x);if(!this.restoreCirculars||!alert){return this.myObj};this.restoreCode=[];this.make(this.myObj,true);var r=this.restoreCode.join(";")+";";eval('r=r.replace(/\\W([0-9]{1,})(\\W)/g,"[$1]$2").replace(/\\.\\;/g,";")');eval(r);return this.myObj},toJsonStringArray:function(arg,out){if(!out){this.path=[]};out=out||[];var u;switch(typeof arg){case'object':this.lastObj=arg;if(this.detectCirculars){var m=this.mem;var n=this.pathMem;for(var i=0;i<m.length;i++){if(arg===m[i]){out.push('"JSONcircRef:'+n[i]+'"');return out}};m.push(arg);n.push(this.path.join("."));};if(arg){if(arg.constructor==Array){out.push('[');for(var i=0;i<arg.length;++i){this.path.push(i);if(i>0)
out.push(',\n');this.toJsonStringArray(arg[i],out);this.path.pop();}
out.push(']');return out;}else if(typeof arg.toString!='undefined'){out.push('{');var first=true;for(var i in arg){if(!this.includeProtos&&arg[i]===arg.constructor.prototype[i]){continue};this.path.push(i);var curr=out.length;if(!first)
out.push(this.compactOutput?',':',\n');this.toJsonStringArray(i,out);out.push(':');this.toJsonStringArray(arg[i],out);if(out[out.length-1]==u)
out.splice(curr,out.length-curr);else
first=false;this.path.pop();}
out.push('}');return out;}
return out;}
out.push('null');return out;case'unknown':case'undefined':case'function':out.push(this.includeFunctions?arg:u);return out;case'string':if(this.restore&&arg.indexOf("JSONcircRef:")==0){this.restoreCode.push('this.myObj.'+this.path.join(".")+"="+arg.split("JSONcircRef:").join("this.myObj."));};out.push('"');var a=['\n','\\n','\r','\\r','"','\\"'];arg+="";for(var i=0;i<6;i+=2){arg=arg.split(a[i]).join(a[i+1])};out.push(arg);out.push('"');return out;default:out.push(String(arg));return out;}}}
__END__