cvsuser     05/08/09 12:46:51

  Added:       App-Widget-JSApp CHANGES MANIFEST MANIFEST.SKIP Makefile.PL
                        README TODO
               App-Widget-JSApp/lib/App/Widget JSApp.pm
               App-Widget-JSApp/lib/App/Widget/JSApp DualSelectWidget.pm
  Log:
  new
  
  Revision  Changes    Path
  1.1                  p5ee/App-Widget-JSApp/CHANGES
  
  Index: CHANGES
  ===================================================================
  #########################################
  # CHANGE LOG
  #########################################
  
  VERSION 0.10
   x Initial release
  
  
  
  
  1.1                  p5ee/App-Widget-JSApp/MANIFEST
  
  Index: MANIFEST
  ===================================================================
  CHANGES
  Makefile.PL
  MANIFEST
  README
  TODO
  lib/App/Widget/JSApp.pm
  lib/App/Widget/JSApp/DualSelectWidget.pm
  
  
  
  1.1                  p5ee/App-Widget-JSApp/MANIFEST.SKIP
  
  Index: MANIFEST.SKIP
  ===================================================================
  ~$
  ^MANIFEST\.
  ^Makefile$
  ^blib/
  ^pm_to_blib$
  \.old$
  \.bak$
  \.cvsignore$
  \.tar\.gz$
  htdocs/.exists
  CVS/
  
  
  
  1.1                  p5ee/App-Widget-JSApp/Makefile.PL
  
  Index: Makefile.PL
  ===================================================================
  
  ######################################################################
  ## File: $Id: Makefile.PL,v 1.1 2005/08/09 19:46:51 spadkins Exp $
  ######################################################################
  
  use ExtUtils::MakeMaker;
  # See lib/ExtUtils/MakeMaker.pm for details of how to influence
  # the contents of the Makefile that is written.
  
  %opts = (
      'NAME'        => 'App-Widget-JSApp',
      'DISTNAME'    => 'App-Widget-JSApp',
      'VERSION'     => '0.10',
      'PREREQ_PM'   => {
                         'App::Widget'              => 0,
                       },
      'clean'       => { FILES => '$(EXE_FILES)' },
      'dist'        => {'COMPRESS'=>'gzip -9f', 'SUFFIX' => 'gz',
                        'ZIP'=>'/usr/bin/zip','ZIPFLAGS'=>'-rl'},
  );
  
  ######################################################################
  # MAKE THE MAKEFILE
  ######################################################################
  
  WriteMakefile(%opts);
  
  sub MY::postamble {
      return <<EOF;
  
  install ::
        @\$(MOD_INSTALL) htdocs  "\$(PREFIX)/htdocs/App"
  
  EOF
  }
  
  
  
  
  1.1                  p5ee/App-Widget-JSApp/README
  
  Index: README
  ===================================================================
  ######################################################################
  ## File: $Id: README,v 1.1 2005/08/09 19:46:51 spadkins Exp $
  ######################################################################
  
  WHAT IS THIS?
  
  This is the App-Widget-JSApp distribution.
  It incorporates the JavaScripted js-app widgets
  
     http://js-app.sourceforge.net/
  
  into the App-Widget world of the App-Context framework.
  
     http://www.officevision.com/pub/App-Context
  
  HOW DO I INSTALL IT?
  
  To install this module, cd to the directory that contains this README
  file and type the following:
  
     perl Makefile.PL
     make
     make test
     make install
  
  
  
  
  1.1                  p5ee/App-Widget-JSApp/TODO
  
  Index: TODO
  ===================================================================
  ######################################################################
  ## File: $Id: TODO,v 1.1 2005/08/09 19:46:51 spadkins Exp $
  ######################################################################
  
  To get to Version 1.0
   o go over the documentation which has been completely neglected
   o create some tests
  
  
  
  
  1.1                  p5ee/App-Widget-JSApp/lib/App/Widget/JSApp.pm
  
  Index: JSApp.pm
  ===================================================================
  
  ######################################################################
  ## $Id: JSApp.pm,v 1.1 2005/08/09 19:46:51 spadkins Exp $
  ######################################################################
  
  package App::Widget::JSApp;
  $VERSION = do { my @r=(q$Revision: 1.1 $=~/\d+/g); sprintf 
"%d."."%02d"x$#r,@r};
  
  use App::Widget;
  @ISA = ( "App::Widget" );
  
  use strict;
  
  =head1 NAME
  
  App::Widget::JSApp::DualListSelectWidget - An ordered multi-select widget 
made up of two HTML <select> tags and four buttons,
  enhanced by JavaScript
  
  =head1 SYNOPSIS
  
     use App::Widget::JSApp::DualListSelectWidget;
  
     ...
  
  =cut
  
  sub html {
      my $self = shift;
      my $name = $self->{name};
      my $context = $self->{context};
  
      $self->init_jsapp();
  
      my (@attrib);
      foreach my $key (keys %$self) {
          if ($key =~ /^jsapp_(.+)/) {
              push(@attrib, $1, $self->{$key});
          }
      }
      if (! defined $self->{jsapp_submittable}) {
          push(@attrib, "submittable", 1);
      }
      my $value = $context->so_get($name);
      $value = "" if (!defined $value);
      push(@attrib, "default", $value);
      my $js_conf = "";
      if ($#attrib > -1) {
          $js_conf = ", {";
          for (my $i = 0; $i < $#attrib; $i += 2) {
              $js_conf .= "," if ($i > 0);
              $js_conf .= " \"$attrib[$i]\" : \"$attrib[$i+1]\"";
          }
          $js_conf .= " }";
      }
  
      my $html = <<EOF;
  <script type="text/javascript">
    context.widget("$name"$js_conf).write();
  </script>
  EOF
  
      return($html);
  }
  
  sub init_jsapp {
      my ($self) = @_;
      my $context = $self->{context};
      my $response = $context->response();
      my $html_url_dir = $context->get_option("html_url_dir");
      my $js = "$html_url_dir/js-app/init.js";
      if (!$response->is_included($js)) {
          my $js_conf = $self->javascript_conf();
          $response->include("javascript", $js_conf);
          $response->include("javascript", $js);
      }
  }
  
  sub javascript_conf {
      my ($self) = @_;
      my $context = $self->{context};
      my $options = $context->options();
      my $html_url_dir     = $options->{html_url_dir};
      my $script_url_dir   = $options->{script_url_dir};
      my $js = $options->{jsapp_init};
      if (!$js) {
          $js = <<EOF;
  <script type="text/javascript" language="JavaScript">
    var appOptions = {
      urlDocRoot    : "$html_url_dir",
      urlScriptRoot : "$script_url_dir"
    };
  </script>
  EOF
      }
      return($js);
  }
  
  1;
  
  
  
  
  1.1                  
p5ee/App-Widget-JSApp/lib/App/Widget/JSApp/DualSelectWidget.pm
  
  Index: DualSelectWidget.pm
  ===================================================================
  
  ######################################################################
  ## $Id: DualSelectWidget.pm,v 1.1 2005/08/09 19:46:51 spadkins Exp $
  ######################################################################
  
  package App::Widget::JSApp::DualSelectWidget;
  $VERSION = do { my @r=(q$Revision: 1.1 $=~/\d+/g); sprintf 
"%d."."%02d"x$#r,@r};
  
  use App::Widget::JSApp;
  @ISA = ( "App::Widget::JSApp" );
  
  use strict;
  
  =head1 NAME
  
  App::Widget::JSApp::DualSelectWidget - An ordered multi-select widget made up 
of two HTML <select> tags and four buttons,
  enhanced by JavaScript
  
  =head1 SYNOPSIS
  
     use App::Widget::JSApp::DualSelectWidget;
  
     ...
  
  =cut
  
  sub html {
      my $self = shift;
      my $name = $self->{name};
  
      $self->init_jsapp();
  
      my $size = "";
      $size = ",\n    \"size\" : $self->{size}" if ($self->{size});
  
      my ($values, $labels) = $self->values_labels();
      my ($values_text, $i);
  
      my $labels_text = "";
  
      if ($#$values > -1) {
          $values_text = ",\n    \"values\" : [";
          for ($i = 0; $i <= $#$values; $i++) {
              $values_text .= "," if ($i > 0);
              $values_text .= "\n     " if ($i % 10 == 0);
              $values_text .= " \"$values->[$i]\"";
          }
          $values_text .= "\n    ]";
  
          if ($labels && %$labels) {
              $labels_text = ",\n    \"labels\" : {";
              for ($i = 0; $i <= $#$values; $i++) {
                  next if (! defined $labels->{$values->[$i]});
                  $labels_text .= "," if ($i > 0);
                  $labels_text .= "\n     " if ($i % 10 == 0);
                  $labels_text .= " \"$values->[$i]\" : 
\"$labels->{$values->[$i]}\"";
              }
              $labels_text .= "\n    }";
          }
      }
      else {
          $values_text = ",\n    values : [ ]";
      }
      my $context = $self->{context};
      my $value = $context->so_get($name);
      $value = "" if (!defined $value);
  
      my $html = <<EOF;
  <script type="text/javascript">
    context.widget("$name", {
      "serviceClass" : "DualSelectWidget",
      "submittable" : 1,
      "default" : "$value"$size$values_text$labels_text
    }).write();
  </script>
  EOF
  
      return($html);
  }
  
  1;
  
  
  
  

Reply via email to