Waft::jQuery - jQuery extensions for Waft


Waft-jQuery documentation Contained in the Waft-jQuery distribution.

Index


Code Index:

NAME

Top

Waft::jQuery - jQuery extensions for Waft

SYNOPSIS

Top

    package MyWebApp;

    use Waft with => '::jQuery'; # for Waft 0.9905 or later

or

    package MyWebApp;

    use base qw( Waft::jQuery Waft );

DESCRIPTION

Top

Waft のアクションメソッドを起動する Ajax API を提供する。

Ajax API

Top

METHODS

Top

AUTHOR

Top

Yuji Tamashiro, <yuji@tamashiro.org>

COPYRIGHT AND LICENSE

Top


Waft-jQuery documentation Contained in the Waft-jQuery distribution.

package Waft::jQuery;

use 5.005;
use strict;
use vars qw( $VERSION );
BEGIN { eval { require warnings } ? 'warnings'->import : ( $^W = 1 ) }

use Waft 0.9910 ();

$VERSION = '0.02';

$Waft::jQuery::Name = 'Waft.jQuery';

sub convert_text_part {
    my ($self, $text_part, $break) = @_;

    my @text_parts
        = split /\b \Q$Waft::jQuery::Name\E \. /xms, $text_part;

    my $code = $self->next( shift(@text_parts), $break );

    while ( @text_parts ) {
        my $text_part = shift @text_parts;

        ( my $method, $text_part ) = split / \b /xms, $text_part, 2;

        if ($method eq 'get') {
            $code .= q{$__self->output_jquery_request_script('get');};
        }
        elsif ($method eq 'post') {
            $code .= q{$__self->output_jquery_request_script('post');};
        }

        $code .= $self->next($text_part, $break);
    }

    return $code;
}

sub output_jquery_request_script {
    my ($self, $method) = @_;

    my $page = $self->jsstr_escape($self->page);
    my $joined_values
        = $self->jsstr_escape( $self->join_values('ALL_VALUES') );
    my $url = $self->jsstr_escape($self->url);

    my $javascript = qq{( function (action, data, callback, type) {
                if ( jQuery.isFunction(data) ) {
                        callback = data;
                        data = {};
                }
                else if (data == undefined) {
                        data = {};
                }

                var waft_v_tag = jQuery('input:hidden[name=\\'v\\']').get(0);

                data['s'] = '$page';
                data['v'] = waft_v_tag ? jQuery(waft_v_tag).val() : '$joined_values';
                data[action] = '';

                return jQuery.$method('$url', data, callback, type);
        } )};

    $javascript =~ s/ (?: \x0D\x0A | [\x0A\x0D] ) \s* / /gxms;

    $self->output($javascript);

    return;
}

sub output_jquery_sync_script {
    my ($self) = @_;

    $self->output($self->make_jquery_sync_script);

    return;
}

sub make_jquery_sync_script {
    my ($self) = @_;

    my $joined_values
        = $self->jsstr_escape( $self->join_values('ALL_VALUES') );
    my $javascript
        = qq{jQuery('input:hidden[name=\\'v\\']').val('$joined_values');};

    return $javascript;
}

sub jquery_sync_script { $_[0]->make_jquery_sync_script(@_[1 .. $#_]) }

1;
__END__