You can subscribe to this list here.
| 2001 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(18) |
Dec
(30) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2002 |
Jan
(20) |
Feb
(4) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
|
From: <ix...@us...> - 2001-12-02 09:43:53
|
ixjonez 01/12/02 01:43:52 commons/lib/LiveFrame - New directory |
|
From: <ix...@us...> - 2001-12-02 09:43:46
|
ixjonez 01/12/02 01:43:45 commons/lib - New directory |
|
From: <ix...@us...> - 2001-12-02 09:43:23
|
ixjonez 01/12/02 01:43:22 Log: imported commons module Status: Vendor Tag: LIVEFRAME Release Tags: INIT No conflicts created by this import |
|
From: <ix...@us...> - 2001-12-02 09:40:47
|
ixjonez 01/12/02 01:40:46
Modified: . Tag: h¼ `¶@h¶@h¶@èx 8ª x¶@x¶@
/tmp/cvs-serv9177/avail No tag avail
Log:
add commons module
Revision Changes Path
No revision
No revision
No revision
No revision
No revision
1.2 +1 -0 CVSROOT/avail
Index: /tmp/cvs-serv9177/avail
===================================================================
RCS file: /cvsroot/liveframe/CVSROOT/avail,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- /tmp/cvs-serv9177/avail 2001/11/29 23:15:52 1.1
+++ /tmp/cvs-serv9177/avail 2001/12/02 09:40:46 1.2
@@ -1,4 +1,5 @@
unavail
avail|ixjonez,jameshome|CVSROOT
+avail|ixjonez,jameshome|commons
avail|ixjonez,jameshome|gallery
avail|ixjonez,jameshome|lab
No revision
No revision
1.2 +1 -0 CVSROOT/avail
Index: avail
===================================================================
RCS file: /cvsroot/liveframe/CVSROOT/avail,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- avail 2001/11/29 23:15:52 1.1
+++ avail 2001/12/02 09:40:46 1.2
@@ -1,4 +1,5 @@
unavail
avail|ixjonez,jameshome|CVSROOT
+avail|ixjonez,jameshome|commons
avail|ixjonez,jameshome|gallery
avail|ixjonez,jameshome|lab
|
|
From: <ix...@us...> - 2001-11-30 02:25:17
|
ixjonez 01/11/29 18:25:16
Modified: lib/LiveFrame Tag: 8þ `¶@h¶@h¶@X X (v 8 P P
и Xu
¶@¶@¶@¶@ ¶@ ¶@¨¶@¨¶@°¶@°¶@¸¶@¸¶@À¶@À¶@
(¦ (¦
à¶@à¶@è¶@è¶@ð¶@ð¶@ø¶@ø¶@
/tmp/cvs-serv23627/lib/LiveFrame/Application.pm No
tag Application.pm
Log:
adjust default urls for the assumption that the cgi will be installed in
a cgi-bin directory and the web directory will be installed as "lab" at the
same level.
Revision Changes Path
No revision
No revision
No revision
No revision
No revision
No revision
No revision
No revision
No revision
No revision
No revision
No revision
No revision
No revision
No revision
No revision
No revision
1.3 +3 -3 lab/lib/LiveFrame/Application.pm
Index: /tmp/cvs-serv23627/lib/LiveFrame/Application.pm
===================================================================
RCS file: /cvsroot/liveframe/lab/lib/LiveFrame/Application.pm,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- /tmp/cvs-serv23627/lib/LiveFrame/Application.pm 2001/11/30 01:48:16 1.2
+++ /tmp/cvs-serv23627/lib/LiveFrame/Application.pm 2001/11/30 02:25:16 1.3
@@ -104,9 +104,9 @@
sub config_vars {
my ($self) = @_;
- $self->{config}->define("template_dir=s", { DEFAULT => './tmpl' });
- $self->{config}->define("img_url=s", { DEFAULT => './img' });
- $self->{config}->define("css_url=s", { DEFAULT => '.' });
+ $self->{config}->define("template_dir=s", { DEFAULT => '../share/tmpl' });
+ $self->{config}->define("img_url=s", { DEFAULT => '../lab/img' });
+ $self->{config}->define("css_url=s", { DEFAULT => '../lab' });
return 1;
}
No revision
No revision
1.3 +3 -3 lab/lib/LiveFrame/Application.pm
Index: Application.pm
===================================================================
RCS file: /cvsroot/liveframe/lab/lib/LiveFrame/Application.pm,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- Application.pm 2001/11/30 01:48:16 1.2
+++ Application.pm 2001/11/30 02:25:16 1.3
@@ -104,9 +104,9 @@
sub config_vars {
my ($self) = @_;
- $self->{config}->define("template_dir=s", { DEFAULT => './tmpl' });
- $self->{config}->define("img_url=s", { DEFAULT => './img' });
- $self->{config}->define("css_url=s", { DEFAULT => '.' });
+ $self->{config}->define("template_dir=s", { DEFAULT => '../share/tmpl' });
+ $self->{config}->define("img_url=s", { DEFAULT => '../lab/img' });
+ $self->{config}->define("css_url=s", { DEFAULT => '../lab' });
return 1;
}
|
|
From: <ix...@us...> - 2001-11-30 01:48:17
|
ixjonez 01/11/29 17:48:16
Modified: lib/LiveFrame Tag: õ `¶@h¶@h¶@èz èz h ¸
¶@¶@° ° ¶@¶@¶@¶@è è ¨¶@¨¶@è
è ¸¶@¸¶@h h m m
ж@ж@ض@ض@à¶@à¶@è¶@è¶@ð¶@ð¶@ø¶@ø¶@ðs
ðs ·@·@ð ð ·@·@ ·@
·@(·@(·@0·@0·@
@·@@·@H·@H·@P·@P·@X·@X·@`·@`·@h·@h·@p·@p·@èª
èª ·@·@Ð Ð
·@·@·@·@ ·@ ·@¨·@¨·@°·@°·@¸·@¸·@À·@À·@È·@È·@з@з@Ø·@Ø·@à·@à·@è·@è·@ð·@ð·@ø·@ø·@
/tmp/cvs-serv16357/lib/LiveFrame/Application.pm No
tag Application.pm
Log:
absolutize the config file path
Revision Changes Path
No revision
No revision
No revision
No revision
No revision
No revision
No revision
No revision
No revision
No revision
No revision
No revision
No revision
No revision
No revision
No revision
No revision
No revision
No revision
No revision
No revision
No revision
No revision
No revision
No revision
No revision
No revision
No revision
No revision
1.2 +15 -5 lab/lib/LiveFrame/Application.pm
Index: /tmp/cvs-serv16357/lib/LiveFrame/Application.pm
===================================================================
RCS file: /cvsroot/liveframe/lab/lib/LiveFrame/Application.pm,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- /tmp/cvs-serv16357/lib/LiveFrame/Application.pm 2001/11/30 01:03:03 1.1
+++ /tmp/cvs-serv16357/lib/LiveFrame/Application.pm 2001/11/30 01:48:16 1.2
@@ -134,7 +134,18 @@
sub config_file {
my $self = shift;
- $self->{config_file} = shift if @_;
+ my $orig = shift if @_;
+
+ if (defined $orig || ! defined $self->{config_file}) {
+ $orig ||= $self->config()->config_file();
+ my $file = File::Spec->file_name_is_absolute($orig) ?
+ File::Spec->canonpath($orig) :
+ File::Spec->rel2abs($orig, Cwd::getcwd());
+ -f $file or
+ die "config file $file not found\n";
+ $self->{config_file} = $file;
+ }
+
return $self->{config_file};
}
@@ -426,10 +437,9 @@
my ($self, $params) = @_;
return 1 unless $params;
- $self->{config_file} = $params->{config_file};
- $self->{default_action_name} =
- $params->{default_action_name} || 'default';
- $self->{default_error_page} = $params->{default_error_page};
+ $self->config_file($params->{config_file});
+ $self->default_action_name($params->{default_action_name} || 'default');
+ $self->default_error_page($params->{default_error_page});
if ($params->{config_vars}) {
unless (UNIVERSAL::isa($params->{config_vars}, 'ARRAY')) {
No revision
No revision
1.2 +15 -5 lab/lib/LiveFrame/Application.pm
Index: Application.pm
===================================================================
RCS file: /cvsroot/liveframe/lab/lib/LiveFrame/Application.pm,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- Application.pm 2001/11/30 01:03:03 1.1
+++ Application.pm 2001/11/30 01:48:16 1.2
@@ -134,7 +134,18 @@
sub config_file {
my $self = shift;
- $self->{config_file} = shift if @_;
+ my $orig = shift if @_;
+
+ if (defined $orig || ! defined $self->{config_file}) {
+ $orig ||= $self->config()->config_file();
+ my $file = File::Spec->file_name_is_absolute($orig) ?
+ File::Spec->canonpath($orig) :
+ File::Spec->rel2abs($orig, Cwd::getcwd());
+ -f $file or
+ die "config file $file not found\n";
+ $self->{config_file} = $file;
+ }
+
return $self->{config_file};
}
@@ -426,10 +437,9 @@
my ($self, $params) = @_;
return 1 unless $params;
- $self->{config_file} = $params->{config_file};
- $self->{default_action_name} =
- $params->{default_action_name} || 'default';
- $self->{default_error_page} = $params->{default_error_page};
+ $self->config_file($params->{config_file});
+ $self->default_action_name($params->{default_action_name} || 'default');
+ $self->default_error_page($params->{default_error_page});
if ($params->{config_vars}) {
unless (UNIVERSAL::isa($params->{config_vars}, 'ARRAY')) {
|
|
From: <ix...@us...> - 2001-11-30 01:47:49
|
ixjonez 01/11/29 17:47:48
Modified: etc Tag: àÆ `¶@h¶@h¶@X ª ȱ ȱ z z ø® ø®
¶@¶@¶@¶@ ¶@ ¶@¨¶@¨¶@`± `± °« °«
À¶@À¶@ȶ@ȶ@ж@ж@ض@ض@à¶@à¶@è¶@è¶@ð¶@ð¶@ø¶@ø¶@
/tmp/cvs-serv15993/etc/lab.conf No tag lab.conf
Log:
adjust default urls for the assumption that the cgi will be installed in
a cgi-bin directory and the web directory will be installed as "lab" at the
same level.
Revision Changes Path
No revision
No revision
No revision
No revision
No revision
No revision
No revision
No revision
No revision
No revision
No revision
No revision
No revision
No revision
No revision
1.2 +2 -2 lab/etc/lab.conf
Index: /tmp/cvs-serv15993/etc/lab.conf
===================================================================
RCS file: /cvsroot/liveframe/lab/etc/lab.conf,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- /tmp/cvs-serv15993/etc/lab.conf 2001/11/30 01:03:03 1.1
+++ /tmp/cvs-serv15993/etc/lab.conf 2001/11/30 01:47:47 1.2
@@ -16,10 +16,10 @@
# template_dir = ../share/tmpl
#
# the url to the images directory
-# img_url = ../img
+# img_url = ../lab/img
#
# the url to the css directory
-# css_url = ..
+# css_url = ../lab
#
# a list of filesystem paths to gallery site directories
#
No revision
No revision
1.2 +2 -2 lab/etc/lab.conf
Index: lab.conf
===================================================================
RCS file: /cvsroot/liveframe/lab/etc/lab.conf,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- lab.conf 2001/11/30 01:03:03 1.1
+++ lab.conf 2001/11/30 01:47:47 1.2
@@ -16,10 +16,10 @@
# template_dir = ../share/tmpl
#
# the url to the images directory
-# img_url = ../img
+# img_url = ../lab/img
#
# the url to the css directory
-# css_url = ..
+# css_url = ../lab
#
# a list of filesystem paths to gallery site directories
#
|
|
From: <ix...@us...> - 2001-11-30 01:03:08
|
ixjonez 01/11/29 17:03:04
Added: . .cvsignore Changes MANIFEST MANIFEST.SKIP
Makefile.PL README test.pl
cgi-bin .cvsignore lab.cgi.PL
etc lab.conf
lib/Bundle/LiveFrame Lab.pm
lib/LiveFrame Action.pm Application.pm Errors.pm Form.pm
Lab.pm
lib/LiveFrame/Lab ConfirmAction.pm GalleryAction.pm
ImageAction.pm NotifyAction.pm ReviewAction.pm
StartAction.pm StartForm.pm
share/docs TODO.txt configuration.txt templates.txt
share/tmpl confirm.tmpl error.tmpl footer.tmpl gallery.tmpl
header.tmpl image.tmpl notify.tmpl review.tmpl
start.tmpl
share/web lfstyles.css
share/web/img 180.gif 270.gif 90.gif bottomarrow.gif
down.gif toparrow.gif up.gif
Log:
add initial files for LiveFrame Lab.
Revision Changes Path
1.1 lab/.cvsignore
Index: .cvsignore
===================================================================
blib
Makefile
pm_to_blib
*.tar.gz
1.1 lab/Changes
Index: Changes
===================================================================
Revision history for LiveFrame::Lab.
0.01 Fri Nov 30 10:33:17 2001
- original version
1.1 lab/MANIFEST
Index: MANIFEST
===================================================================
Changes
MANIFEST
Makefile.PL
README
cgi-bin/lab.cgi.PL
etc/lab.conf
lib/Bundle/LiveFrame/Lab.pm
lib/LiveFrame/Action.pm
lib/LiveFrame/Application.pm
lib/LiveFrame/Errors.pm
lib/LiveFrame/Form.pm
lib/LiveFrame/Lab.pm
lib/LiveFrame/Lab/ConfirmAction.pm
lib/LiveFrame/Lab/GalleryAction.pm
lib/LiveFrame/Lab/ImageAction.pm
lib/LiveFrame/Lab/NotifyAction.pm
lib/LiveFrame/Lab/ReviewAction.pm
lib/LiveFrame/Lab/StartAction.pm
lib/LiveFrame/Lab/StartForm.pm
share/docs/TODO.txt
share/docs/actions.txt
share/docs/configuration.txt
share/docs/design.txt
share/docs/object-model.txt
share/docs/templates.txt
share/tmpl/confirm.tmpl
share/tmpl/error.tmpl
share/tmpl/footer.tmpl
share/tmpl/gallery.tmpl
share/tmpl/header.tmpl
share/tmpl/image.tmpl
share/tmpl/notify.tmpl
share/tmpl/review.tmpl
share/tmpl/start.tmpl
share/web/img/180.gif
share/web/img/270.gif
share/web/img/90.gif
share/web/img/bottomarrow.gif
share/web/img/down.gif
share/web/img/toparrow.gif
share/web/img/up.gif
share/web/lfstyles.css
test.pl
1.1 lab/MANIFEST.SKIP
Index: MANIFEST.SKIP
===================================================================
~$
^MANIFEST\.
^Makefile$
^blib/
^pm_to_blib$
\.old$
\.bak$
\.cvsignore$
\.tar\.gz$
CVS/
^cgi-bin/lab.cgi$
^bundle
1.1 lab/Makefile.PL
Index: Makefile.PL
===================================================================
# -*- Mode: Perl; indent-tabs-mode: nil; -*-
use ExtUtils::MakeMaker;
WriteMakefile(
NAME => 'LiveFrame::Lab',
VERSION_FROM => 'lib/LiveFrame/Lab.pm',
PREREQ_PM => {AppConfig => 0,
CGI => 0,
HTML::Entities => 0,
Template => 2.0.6,
URI => 0},
PL_FILES => {'cgi-bin/lab.cgi.PL' =>
'cgi-bin/lab.cgi'},
clean => {FILES => 'cgi-bin/lab.cgi'},
($] >= 5.005 ?
(ABSTRACT_FROM => 'lib/LiveFrame/Lab.pm',
AUTHOR => 'Brian Moseley <bc...@ma...>') : ()),
);
1.1 lab/README
Index: README
===================================================================
LiveFrame Lab
=============
LiveFrame Lab is a Perl CGI application for creating photo galleries
viewable with LiveFrame Gallery.
The web site for LiveFrame Lab is located at
<http://www.liveframe.org/lab/>.
For comments, questions, bug reports etc, join the mailing list for
LiveFrame Lab users by visiting
<http://lists.sourceforge.net/lists/listinfo/liveframe-lab-users>.
INSTALLATION
(this is just a synopsis. more/better info soon -bcm)
To install prerequisites, use the CPAN module to install the LiveFrame
Lab bundle:
perl -I`pwd/lib -MCPAN -e 'install Bundle::LiveFrame::Lab'
To install LiveFrame Lab, type the following:
perl Makefile.PL
make
make test
make install
DEPENDENCIES
This module requires these other modules and libraries:
AppConfig
HTML::Entities (from the HTML-Parser distribution)
Template (from the Template-Toolkit distribution)
URI
COPYRIGHT AND LICENCE
Copyright (c) 2001 Brian Moseley <bc...@ma...>
You may distribute under the terms of either the GNU General Public
License or the Artistic License, as specified in the Perl README
file.
THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
1.1 lab/test.pl
Index: test.pl
===================================================================
# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl test.pl'
#########################
use Test;
BEGIN { plan tests => 1 };
use LiveFrame::Lab;
ok(1); # If we made it this far, we're ok.
#########################
# Insert your test code below, the Test module is use()ed here so read
# its man page ( perldoc Test ) for help writing this test script.
1.1 lab/cgi-bin/.cvsignore
Index: .cvsignore
===================================================================
lab.cgi
1.1 lab/cgi-bin/lab.cgi.PL
Index: lab.cgi.PL
===================================================================
# -*- Mode: Perl; indent-tabs-mode: nil; -*-
# ripped off from LWP. Thanks!
use strict;
use Config;
use File::Basename qw(basename dirname);
chdir dirname $0;
(my $file = basename $0) =~ s/\.PL$//;
$file =~ s/\.pl$// if ($Config{'osname'} eq 'VMS' or
$Config{'osname'} eq 'OS2'); # "case-forgiving"
open OUT,">$file" or die "Can't create $file: $!";
chmod 0755, $file;
print "Extracting $file (with variable substitutions)\n";
print OUT <<"!GROK!THIS!";
$Config{'startperl'} -wT
!GROK!THIS!
print OUT <<'!NO!SUBS!';
use strict;
use LiveFrame::Lab ();
#
# SITE-SPECIFIC CONFIGURATION
#
#
# in the script, you only need to specify the location of the
# configuration file. all other elements are configured inside that
# file.
my $config_file = '../etc/lab.conf';
#
# MAIN PROGRAM
#
LiveFrame::Lab->new->run({config_file => $config_file});
!NO!SUBS!
1.1 lab/etc/lab.conf
Index: lab.conf
===================================================================
#
# LiveFrame Lab configuration file
#
# The following tilde and variable expansions may be used in values:
#
# ~ home directory of user owner of lab.cgi
# ~www home directory of 'www' user
# $(var) variable previously defined in the config file
# ${PWD} environment variable
#
# See docs/configuration.txt for more information on the available
# configuration variables.
#
# the filesystem path to the page template directory
# template_dir = ../share/tmpl
#
# the url to the images directory
# img_url = ../img
#
# the url to the css directory
# css_url = ..
#
# a list of filesystem paths to gallery site directories
#
site_dir = ~/work/code/liveframe/gallery-demo/lfdir/galleries
site_dir = ~/work/code/maz/site/html/bcm/lfdir/galleries
#
# the filesystem path to the image upload directory
upload_dir = ~/work/code/liveframe/uploads
1.1 lab/lib/Bundle/LiveFrame/Lab.pm
Index: Lab.pm
===================================================================
# -*- Mode: Perl; indent-tabs-mode: nil; -*-
package Bundle::LiveFrame::Lab;
$VERSION = '0.01';
1;
__END__
=pod
=head1 NAME
Bundle::LiveFrame::Lab - a bundle to install the dependencies for
LiveFrame::Lab
=head1 SYNOPSIS
C<perl -MCPAN -e 'install Bundle::LiveFrame::Lab'>
=head1 CONTENTS
HTML::Entities
URI
AppConfig
Template 2.0.6
=head1 DESCRIPTION
This bundle includes the dependencies for LiveFrame::Lab.
=head1 AUTHOR
Brian Moseley, bc...@ma...
=cut
1.1 lab/lib/LiveFrame/Action.pm
Index: Action.pm
===================================================================
# -*- Mode: Perl; indent-tabs-mode: nil; -*-
package LiveFrame::Action;
use strict;
sub new {
my ($type, $params) = @_;
my $class = ref($type) || $type;
my $self = bless
{
name => undef,
}, $class;
$self->init($params || {});
return $self;
}
sub init {
my ($self, $params) = @_;
$self->name($params->{name}) if $params->{name};
return 1;
}
sub name {
my $self = shift;
$self->{name} = shift if @_;
return $self->{name};
}
1;
1.1 lab/lib/LiveFrame/Application.pm
Index: Application.pm
===================================================================
# -*- Mode: Perl; indent-tabs-mode: nil; -*-
package LiveFrame::Application;
use strict;
use AppConfig ();
use CGI ();
use Cwd ();
use File::Spec ();
use HTML::Entities ();
use Template 2.0.6 ();
use URI ();
$LiveFrame::Application::VERSION = '0.01';
sub new {
my ($type) = @_;
my $class = ref($type) || $type;
my $self = bless {
actions => {},
attrs => {},
cgi => undef,
config => undef,
config_processed => undef,
config_file => undef,
current_action_name => undef,
current_control_name => undef,
current_form_name => undef,
default_action_name => undef,
default_error_page => undef,
forms => {},
template_dir => undef,
tproc => undef,
}, $class;
return $self;
}
## accessor methods
sub action {
my ($self, $name) = @_;
return undef unless $name;
return $self->{actions}->{$name};
}
sub actions {
my ($self) = @_;
my @actions = values %{ $self->{actions} };
return wantarray ? @actions : \@actions;
}
sub add_action {
my ($self, $name, $class) = @_;
return undef unless $name && $class;
eval "require $class";
die "can't load action class $class: $@\n" if $@;
my $action = $class->new();
$action->name($name);
$self->{actions}->{$name} = $action;
return 1;
}
sub add_form {
my ($self, $name, $class) = @_;
return undef unless $name && $class;
eval "require $class";
die "can't load action class $class: $@\n" if $@;
my $form = $class->new();
$form->name($name);
$self->{forms}->{$name} = $form;
return 1;
}
sub attr {
my $self = shift;
my $name = shift or
return undef;
$self->{attrs}->{$name} = shift if @_;
return $self->{attrs}->{$name};
}
sub attrs {
my ($self) = @_;
my @names = keys %{ $self->{attrs} };
return wantarray ? @names : \@names;
}
sub cgi {
my ($self) = @_;
$self->{cgi} ||= CGI->new();
return $self->{cgi};
}
sub config_vars {
my ($self) = @_;
$self->{config}->define("template_dir=s", { DEFAULT => './tmpl' });
$self->{config}->define("img_url=s", { DEFAULT => './img' });
$self->{config}->define("css_url=s", { DEFAULT => '.' });
return 1;
}
sub config {
my ($self) = @_;
my $config_error = sub { die @_, "\n"; };
unless ($self->{config}) {
my $config_opts =
{
PEDANTIC => 1,
ERROR => $config_error,
GLOBAL => {EXPAND => AppConfig::EXPAND_ALL},
};
$self->{config} = AppConfig->new($config_opts);
$self->config_vars();
}
return $self->{config};
}
sub config_file {
my $self = shift;
$self->{config_file} = shift if @_;
return $self->{config_file};
}
sub control {
my ($self) = @_;
$self->form() unless defined $self->{control};
return $self->{control};
}
sub css_url {
my ($self) = @_;
return $self->config()->css_url();
}
sub current_action {
my ($self) = @_;
my $name = $self->current_action_name();
return defined $name ?
$self->action($name) :
$self->default_action();
}
sub current_action_name {
my $self = shift;
if (@_) {
my $name = shift;
unless ($self->action($name)) {
die "current action $name is not defined\n";
}
$self->{current_action_name} = $name;
} elsif (! defined $self->{current_action_name}) {
my $path_info = $self->cgi()->path_info();
if ($path_info) {
$path_info =~ s|^/||;
if ($path_info) {
($self->{current_action_name} = $path_info) =~ s|/|_|g;
}
}
}
return $self->{current_action_name};
}
sub current_form {
my ($self) = @_;
my $form = $self->form($self->current_form_name()) or
return undef;
$form->control($self->current_control_name());
my $cgi = $self->cgi();
for my $name ($cgi->param()) {
$form->$name($cgi->param($name)) if $form->can($name);
}
return $form;
}
sub current_control_name {
my $self = shift;
$self->{current_control_name} = shift if @_;
return $self->{current_control_name};
}
sub current_form_name {
my $self = shift;
if (@_) {
my $name = shift;
unless ($self->form($name)) {
die "current form $name is not defined\n";
}
$self->{current_form_name} = $name;
} elsif (! defined $self->{current_form_name}) {
for my $name ($self->cgi()->param()) {
($self->{current_form_name}, $self->{current_control_name}) =
($name =~ m|^form_(.+)_(.+)$|);
last if defined $self->{current_form_name};
}
}
return $self->{current_form_name};
}
sub default_action {
my ($self) = @_;
return $self->action($self->default_action_name());
}
sub default_action_name {
my $self = shift;
$self->{default_action_name} = shift if @_;
return $self->{default_action_name};
}
sub default_error_page {
my $self = shift;
$self->{default_error_page} = shift if @_;
return $self->{default_error_page};
}
sub form {
my ($self, $name) = @_;
return undef unless $name;
return $self->{forms}->{$name};
}
sub forms {
my ($self) = @_;
my @forms = values %{ $self->{forms} };
return wantarray ? @forms : \@forms;
}
sub img_url {
my ($self) = @_;
return $self->config()->img_url();
}
sub remove_action {
my ($self, $name) = @_;
return undef unless $name;
delete $self->{actions}->{name};
return 1;
}
sub remove_form {
my ($self, $name) = @_;
return undef unless $name;
delete $self->{forms}->{name};
return 1;
}
sub template_dir {
my ($self) = @_;
unless (defined $self->{template_dir}) {
my $orig = $self->config()->template_dir();
$self->{template_dir} = File::Spec->file_name_is_absolute($orig) ?
File::Spec->canonpath($orig) :
File::Spec->rel2abs($orig, Cwd::getcwd());
}
return $self->{template_dir};
}
sub tproc {
my ($self) = @_;
unless ($self->{tproc}) {
my $tproc_opts =
{
INCLUDE_PATH => $self->template_dir(),
};
$self->{tproc} = Template->new($tproc_opts);
}
return $self->{tproc};
}
## application utility methods
sub fill_in_form {
my ($self, $form) = @_;
for my $name ($form->fields()) {
$self->attr($name, $form->field($name));
}
return 1;
}
sub process_config {
my ($self) = @_;
unless ($self->{config_processed}) {
$self->config()->file($self->config_file());
$self->{config_processed} = 1;
}
return 1;
}
sub process_template {
my ($self, $page, $tparams) = @_;
$tparams ||= {};
my $cgi = $self->cgi();
my $config = $self->config();
my $tproc = $self->tproc();
for my $name ($self->attrs()) {
$tparams->{$name} = $self->attr($name);
}
$tparams->{self_url} = $self->url($cgi->script_name());
$tparams->{img_url} = $self->url($config->img_url());
$tparams->{css_url} = $self->url($config->css_url());
$tproc->process($self->template($page), $tparams) or do {
$self->send_tmpl_error($tproc->error());
};
return 1;
}
sub send_page {
my ($self, $page) = @_;
print $self->cgi()->header();
return $self->process_template($page);
}
sub send_redirect {
my ($self, $page) = @_;
my $cgi = $self->cgi();
print $cgi->redirect(join('/', $cgi->script_name(), $page));
return 1;
}
sub send_error {
my ($self, $msg) = @_;
print $self->cgi()->header();
my $error_page = $self->default_error_page();
if (defined $error_page) {
return $self->process_template($error_page, {error_msg => $msg});
}
$msg = HTML::Entities::encode_entities($msg);
print <<EOT;
<p>
<b>Application Error</b>
</p>
<pre>
$msg
</pre>
EOT
return 1;
}
sub send_tmpl_error {
my ($self, $error) = @_;
my $msg = $error->info() || '';
$msg =~ s|\\n|\n|g;
$msg = HTML::Entities::encode_entities($msg);
print <<EOT;
<p>
<b>Template Error</b>
</p>
<pre>
$msg
</pre>
EOT
return 1;
}
sub template {
my ($self, $page) = @_;
return join('.', $page, 'tmpl');
}
sub url {
my ($self, $path) = @_;
my $cgi = $self->cgi();
my $scheme = $cgi->https() ? 'https' : 'http';
my $url = URI->new($path, $scheme);
my $abs = $url->abs($cgi->script_name());
$abs =~ s|/$||;
return $abs;
}
## run methods
sub start {
my ($self, $params) = @_;
return 1 unless $params;
$self->{config_file} = $params->{config_file};
$self->{default_action_name} =
$params->{default_action_name} || 'default';
$self->{default_error_page} = $params->{default_error_page};
if ($params->{config_vars}) {
unless (UNIVERSAL::isa($params->{config_vars}, 'ARRAY')) {
die "application init param 'config_vars' must be an array ref\n";
}
my $config = $self->config();
for my $var (@{ $params->{config_vars} }) {
$config->define($var);
}
}
if ($params->{actions}) {
unless (UNIVERSAL::isa($params->{actions}, 'ARRAY')) {
die "application init param 'actions' must be an array ref\n";
}
for (my $i = 0; $i < @{ $params->{actions} }; $i++) {
my $action_params = $params->{actions}->[$i];
unless (UNIVERSAL::isa($params, 'HASH')) {
die "application init param 'actions[$i]'",
" must be an array ref\n";
}
unless (defined $action_params->{name}) {
die "application init param 'actions[$i]", "->name'",
" must be defined\n";
}
unless (defined $action_params->{class}) {
die "application init param 'actions[$i]", "->class'",
" must be defined\n";
}
$self->add_action($action_params->{name},
$action_params->{class});
}
}
if ($params->{forms}) {
unless (UNIVERSAL::isa($params->{forms}, 'ARRAY')) {
die "application init param 'forms' must be an array ref\n";
}
for (my $i = 0; $i < @{ $params->{forms} }; $i++) {
my $form_params = $params->{forms}->[$i];
unless (UNIVERSAL::isa($params, 'HASH')) {
die "application init param 'forms[$i]'",
" must be an array ref\n";
}
unless (defined $form_params->{name}) {
die "application init param 'forms[$i]", "->name'",
" must be defined\n";
}
unless (defined $form_params->{class}) {
die "application init param 'forms[$i]", "->class'",
" must be defined\n";
}
$self->add_form($form_params->{name},
$form_params->{class});
}
}
return 1;
}
sub run {
my ($self, $params) = @_;
eval { $self->start($params) };
if ($@) {
$self->send_error("application could not be started: $@");
return 0;
}
# force the config file to be read.
eval { $self->process_config() };
if ($@) {
$self->send_error("config file error: $@");
return 0;
}
my $action = eval { $self->current_action() };
if ($@) {
$self->send_error("can't get current action: $@");
return 0;
}
if ($action) {
my $form = eval { $self->current_form() };
if ($@) {
$self->send_error("can't get current form: $@");
return 0;
}
if ($form) {
# validate the form
eval { $form->validate($self) };
if ($@) {
# the form did not validate successfully. reset form
# variables and set errors. send the previous page again.
$self->attr('errors', $@);
$self->fill_in_form($form);
# XXX: requires the previous action to have the same name
# as the form in the page that it sends
$self->current_action_name($form->name());
$action = $self->current_action();
}
}
else {
# the action did not involve a form
# XXX: how to signal that an action requires a form submission?
}
# execute the action method, which will send a page when it
# completes
eval { $action->perform($self) };
if ($@) {
$self->send_error($@);
}
}
else {
# no action exists for the specified action name so assume
# it's a page name
my $msg = sprintf("requested action [%s] not defined",
$self->current_action_name());
$self->send_error($msg);
return 0;
# XXX: set a config switch to enable page sending?
# eval {
# $self->send_page($self->current_action_name());
# };
# if ($@) {
# $self->send_error($@);
# }
}
return 0;
}
1;
1.1 lab/lib/LiveFrame/Errors.pm
Index: Errors.pm
===================================================================
# -*- Mode: Perl; indent-tabs-mode: nil; -*-
package LiveFrame::Errors;
use strict;
sub new {
my ($type, $params) = @_;
my $class = ref($type) || $type;
my $self = bless
{
errors => {},
}, $class;
$self->init($params || {});
return $self;
}
sub init {
my ($self, $params) = @_;
return 1;
}
sub add_error {
my ($self, $msg, $name) = @_;
return undef unless defined $msg;
$name ||= 'default';
$self->{errors}->{$name} ||= [];
push @{ $self->{errors}->{$name} }, $msg;
return 1;
}
sub errors {
my ($self, $name) = @_;
$name ||= 'default';
return undef unless exists $self->{errors}->{$name};
my @errors = @{ $self->{errors}->{$name} };
return wantarray ? @errors : \@errors;
}
sub error_types {
my ($self) = @_;
my @types = keys %{ $self->{types} };
return wantarray ? @types : \@types;
}
sub remove_errors {
my ($self, $name) = @_;
return undef unless $name;
delete $self->{errors}->{name};
return 1;
}
1;
1.1 lab/lib/LiveFrame/Form.pm
Index: Form.pm
===================================================================
# -*- Mode: Perl; indent-tabs-mode: nil; -*-
package LiveFrame::Form;
use strict;
sub new {
my ($type, $params) = @_;
my $class = ref($type) || $type;
my $self = bless
{
control => undef,
name => undef,
fields => {},
}, $class;
$self->init($params || {});
return $self;
}
sub init {
my ($self, $params) = @_;
$self->name($params->{name}) if $params->{name};
$self->control($params->{control}) if $params->{control};
return 1;
}
## accessors
sub control {
my $self = shift;
$self->{control} = shift if @_;
return $self->{control};
}
sub field {
my $self = shift;
my $name = shift or
return undef;
$self->{fields}->{$name} = shift if @_;
return $self->{fields}->{$name};
}
sub fields {
my $self = shift;
my @names = keys %{ $self->{fields} };
return wantarray ? @names : \@names;
}
sub name {
my $self = shift;
$self->{name} = shift if @_;
return $self->{name};
}
## public methods
sub validate {
my ($self, $lab) = @_;
return 1;
}
1;
1.1 lab/lib/LiveFrame/Lab.pm
Index: Lab.pm
===================================================================
# -*- Mode: Perl; indent-tabs-mode: nil; -*-
package LiveFrame::Lab;
use strict;
use LiveFrame::Application ();
$LiveFrame::Lab::VERSION = '0.01';
@LiveFrame::Lab::ISA = ('LiveFrame::Application');
sub start {
my ($self, $params) = @_;
$self->SUPER::start($params);
$self->default_action_name('start');
$self->default_error_page('error');
my $config = $self->config();
$config->define('site_dir=s@');
$config->define('upload_dir=s');
$self->add_action('start', 'LiveFrame::Lab::StartAction');
$self->add_action('gallery', 'LiveFrame::Lab::GalleryAction');
$self->add_action('image', 'LiveFrame::Lab::ImageAction');
$self->add_action('review', 'LiveFrame::Lab::ReviewAction');
$self->add_action('confirm', 'LiveFrame::Lab::ConfirmAction');
$self->add_action('notify', 'LiveFrame::Lab::NotifyAction');
$self->add_form('start', 'LiveFrame::Lab::StartForm');
return 1;
}
1.1 lab/lib/LiveFrame/Lab/ConfirmAction.pm
Index: ConfirmAction.pm
===================================================================
# -*- Mode: Perl; indent-tabs-mode: nil; -*-
package LiveFrame::Lab::ConfirmAction;
use strict;
use LiveFrame::Action ();
@LiveFrame::Lab::ConfirmAction::ISA = ('LiveFrame::Action');
sub perform {
my ($self, $lab) = @_;
return $lab->send_page('confirm');
}
1;
1.1 lab/lib/LiveFrame/Lab/GalleryAction.pm
Index: GalleryAction.pm
===================================================================
# -*- Mode: Perl; indent-tabs-mode: nil; -*-
package LiveFrame::Lab::GalleryAction;
use strict;
use LiveFrame::Action ();
@LiveFrame::Lab::GalleryAction::ISA = ('LiveFrame::Action');
sub perform {
my ($self, $lab) = @_;
$lab->attr('gallery_dir', $lab->cgi()->param('upload_set_dir'));
return $lab->send_page('gallery');
}
1;
1.1 lab/lib/LiveFrame/Lab/ImageAction.pm
Index: ImageAction.pm
===================================================================
# -*- Mode: Perl; indent-tabs-mode: nil; -*-
package LiveFrame::Lab::ImageAction;
use strict;
use LiveFrame::Action ();
@LiveFrame::Lab::ImageAction::ISA = ('LiveFrame::Action');
sub perform {
my ($self, $lab) = @_;
return $lab->send_page('image');
}
1;
1.1 lab/lib/LiveFrame/Lab/NotifyAction.pm
Index: NotifyAction.pm
===================================================================
# -*- Mode: Perl; indent-tabs-mode: nil; -*-
package LiveFrame::Lab::NotifyAction;
use strict;
use LiveFrame::Action ();
@LiveFrame::Lab::NotifyAction::ISA = ('LiveFrame::Action');
sub perform {
my ($self, $lab) = @_;
return $lab->send_page('notify');
}
1;
1.1 lab/lib/LiveFrame/Lab/ReviewAction.pm
Index: ReviewAction.pm
===================================================================
# -*- Mode: Perl; indent-tabs-mode: nil; -*-
package LiveFrame::Lab::ReviewAction;
use strict;
use LiveFrame::Action ();
@LiveFrame::Lab::ReviewAction::ISA = ('LiveFrame::Action');
sub perform {
my ($self, $lab) = @_;
return $lab->send_page('review');
}
1;
1.1 lab/lib/LiveFrame/Lab/StartAction.pm
Index: StartAction.pm
===================================================================
# -*- Mode: Perl; indent-tabs-mode: nil; -*-
package LiveFrame::Lab::StartAction;
use strict;
use LiveFrame::Action ();
@LiveFrame::Lab::StartAction::ISA = ('LiveFrame::Action');
sub perform {
my ($self, $lab) = @_;
# get a list of site directories
my $site_dirs = $lab->config()->site_dir() or do {
$lab->send_error("no gallery site directories defined");
return 1;
};
# get the upload directory and a list of image set directories
# within
my $upload_dir = $lab->config()->upload_dir() or do {
$lab->send_error("no upload directory defined");
return 1;
};
opendir UPLOAD_DIR, $upload_dir or do {
$lab->send_error("can't open upload dir [$upload_dir]: $!");
return 1;
};
my @upload_set_dirs = grep { !/^\./ } readdir UPLOAD_DIR;
closedir UPLOAD_DIR;
@upload_set_dirs or do {
$lab->send_error("no set dirs within upload dir [$upload_dir]: $!");
return 1;
};
# set application attributes
$lab->attr('site_dirs', $site_dirs);
$lab->attr('upload_dir', $upload_dir);
$lab->attr('upload_set_dirs', \@upload_set_dirs);
return $lab->send_page('start');
}
1;
1.1 lab/lib/LiveFrame/Lab/StartForm.pm
Index: StartForm.pm
===================================================================
# -*- Mode: Perl; indent-tabs-mode: nil; -*-
package LiveFrame::Lab::StartForm;
use strict;
use LiveFrame::Errors ();
use LiveFrame::Form ();
@LiveFrame::Lab::StartForm::ISA = ('LiveFrame::Form');
sub site_dir {
my $self = shift;
$self->field('site_dir', shift) if @_;
return $self->field('site_dir');
}
sub upload_set_dir {
my $self = shift;
$self->field('upload_set_dir', shift) if @_;
return $self->field('upload_set_dir');
}
sub perform {
my ($self, $lab) = @_;
return $lab->send_page('notify');
}
sub validate {
my ($self, $lab) = @_;
my $site_dir = $self->site_dir();
my $upload_set_dir = $self->upload_set_dir();
unless (defined $site_dir && defined $upload_set_dir) {
my $errors = LiveFrame::Errors->new();
defined $site_dir or
$errors->add_error('gallery site not specified');
defined $upload_set_dir or
$errors->add_error('upload_directory not specified');
die $errors;
}
}
1;
1.1 lab/share/docs/TODO.txt
Index: TODO.txt
===================================================================
TODO
====
framework:
o cache all POSTed pages
o separate LiveFrame::CGIRunner class
o map forms to actions so that names don't have to be the same, and
so that we can configure the action to require a form submission
o workflow configuration to chain steps together?
o allow pages without actions? should be possible with action
mappings - no form in page, or no action for this form - send a
page instead of form
Lab:
o object model
o classes
o move start action stuff into start template
installation:
o automated installation
1.1 lab/share/docs/configuration.txt
Index: configuration.txt
===================================================================
CONFIGURATION:
AppConfig is used for processing the config file. The location of the
config file must be specified in lab.cgi, either absolutely or
relative to the directory containing lab.cgi.
ex: my $config_file = '../conf/lab.conf';
The following variables are available for configuration in the config
file:
o template_dir: The filesystem path to the directory containing page
templates, specified either absolutely or relative to the
directory containing lab.cgi. This directory does not need to be
web-visible. Defaults to ./tmpl.
ex: template_dir = /usr/local/share/lab/tmpl
o img_url: The url to the directory containing image resources,
specified either absolutely or relative to the directory
containing lab.cgi. The image directory must be
web-visible. Defaults to ./img.
ex: img_url = /lab/img
o css_url: The url to the directory containing CSS resources,
specified either absolutely or relative to the directory
containing lab.cgi. The image directory must be
web-visible. Defaults to . (the directory containing lab.cgi).
ex: img_url = /lab
1.1 lab/share/docs/templates.txt
Index: templates.txt
===================================================================
TEMPLATE DESIGN:
Template Toolkit is used for processing page templates. Template
language elements are denoted by [% %] markup. See
http://www.template-toolkit.org/ for a wealth of information about the
syntax of the template language.
The application manages the creation of correct urls for image and css
resources and for application actions. The following template
variables are available for use
o self_url: The url to lab.cgi
ex: <form method="POST" action="[% self_url %]/review
o img_url: The url to the directory containing images
ex: <img src="[% img_url %]/uparrow.gif">
o css_url: The url to the directory containing css stylesheets
ex: <link rel="stylesheet" href="[% css_url %]/lfstyles.css">
TBD: errors
TBD: form data
1.1 lab/share/tmpl/confirm.tmpl
Index: confirm.tmpl
===================================================================
<html>
<head>
<title>[ LiveFrame ] Lab</title>
<link rel="stylesheet" href="[% css_url %]/lfstyles.css">
</head>
<body bgcolor="#ffffff" text="#666666" link="#333333" vlink="#333333" alink="#cc0000">
<div align="center">
<form method="POST" action="[% self_url %]/notify">
<pre>
</pre>
<table cellpadding="0" cellspacing="0" border="0" width="550">
<tr>
<td>
<big><b>LiveFrame Lab</b></big><br>
Gallery <b>sample</b> has been created!
<br>
<br></td>
</tr>
<tr>
<td valign="top">
<b>GALLERY LOCATION</b><br>
your new gallery can be accessed directly here:
<br>
<a href="http://www.vagabondage.com/lf/sample" target="newgallery">http://www.vagabondage.com/lf/sample</a>
<br>
(link will open a new window)
<br>
<br>
<input type="submit" value="Create Another Gallery">
<br>
<br>
<b>ANNOUNCE YOUR GALLERY (optional)</b><br>
Send an email to people who will want to see your gallery.
<br>
<br>
To:<br>
<input type="text" size="50"><br>
(seperate multiple addresses with commas)
<br>
<br>
From:<br>
<input type="text" size="50" value="James Home <ji...@va...>">
<br>
<br>
Subject:<br>
<input type="text" size="50" value="New Photographs Up!">
<br>
<br>
Message<br>
<textarea rows="8" cols="50" wrap="soft">
I uploaded some new photographs. You can see them here:
http://www.vagabondage.com/lf/sample
come take a look!
</textarea>
<br>
<br>
<input type="submit" value="Send Message"></td>
</tr>
</table>
</form>
</div>
</body>
</html>
1.1 lab/share/tmpl/error.tmpl
Index: error.tmpl
===================================================================
<html>
<head>
<title>[ LiveFrame ] Lab</title>
<link rel="stylesheet" href="[% css_url %]/lfstyles.css">
</head>
<body bgcolor="#ffffff" text="#666666" link="#333333" vlink="#333333" alink="#cc0000">
<div align="center">
<pre>
</pre>
<table cellpadding="0" cellspacing="0" border="0" width="550">
<tr>
<td>
<big><b>LiveFrame Lab</b></big><br>
<br></td>
</tr>
<tr>
<td valign="top">
<b>APPLICATION ERROR</b><br>
<pre>
[% error_msg | html %]
</pre>
<br>
<br>
</tr>
</table>
</div>
</body>
</html>
1.1 lab/share/tmpl/footer.tmpl
Index: footer.tmpl
===================================================================
</div>
</body>
</html>
1.1 lab/share/tmpl/gallery.tmpl
Index: gallery.tmpl
===================================================================
[% INCLUDE header.tmpl %]
<form method="POST" action="[% self_url %]/image">
<table cellpadding="0" cellspacing="0" border="0" width="550">
<tr>
<td>
<big><b>LiveFrame Lab</b></big><br>
Build a LiveFrame gallery in a few easy steps.
<br>
<br></td>
</tr>
<tr>
<td valign="top">
<b>GALLERY DIRECTORY</b><br>
<input name="gallery_dir" value="[% gallery_dir %]" type="text" size="50">
<br>
<br>
<b>GALLERY TITLE</b><br>
<input name="gallery_title" value="[% gallery_title %]" type="text" size="50">
<br>
<br>
<b>GALLERY DESCRIPTION</b><br>
<textarea name="gallery_desc" rows="2" cols="50" wrap="soft">
[% gallery_desc %]
</textarea>
<br>
<br>
<b>ORIGINAL IMAGE SIZE</b><br>
Specify the approximate size of your originals to determine how they will be scaled for display:<br>
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td bgcolor="#cccccc">
<table cellpadding="3" cellspacing="1" border="0">
<tr>
<td bgcolor="#ffffff"><br></td>
<td bgcolor="#ffffff" nowrap>
<b>ORIGINAL SIZE</b></td>
<td bgcolor="#ffffff" nowrap>
<b>IMAGES TO BUILD</b></td>
</tr>
<tr>
<td bgcolor="#ffffff" align="center">
<input type="radio" name="scaleset" value="2048"></td>
<td bgcolor="#ffffff" nowrap>
2048x1536 (or larger)</td>
<td bgcolor="#ffffff" nowrap>
<b>XL</b> (orig.), <b>L</b> (1024x768), <b>M</b> (640x480), <b>S</b> (400x300)</td>
</tr>
<tr>
<td bgcolor="#ffffff" align="center">
<input type="radio" name="scaleset" value="1024" checked></td>
<td bgcolor="#ffffff" nowrap>
1024x768</td>
<td bgcolor="#ffffff" nowrap>
<b>L</b> (orig.), <b>M</b> (640x480), <b>S</b> (400x300)</td>
</tr>
<tr>
<td bgcolor="#ffffff" align="center">
<input type="radio" name="scaleset" value="640"></td>
<td bgcolor="#ffffff" nowrap>
640x480</td>
<td bgcolor="#ffffff" nowrap>
<b>L</b> (orig.), <b>S</b> (400x300)</td>
</tr>
<tr>
<td bgcolor="#ffffff" align="center">
<input type="radio" name="scaleset" value="512"></td>
<td bgcolor="#ffffff" nowrap>
512x384 (or smaller)</td>
<td bgcolor="#ffffff" nowrap>
one size (orig.)</td>
</tr>
<tr>
<td bgcolor="#ffffff" align="center">
<input type="radio" name="scaleset" value="no"></td>
<td bgcolor="#ffffff" nowrap colspan="2">
do not create scaled images</td>
</tr>
</table></td>
</tr>
</table></td>
</tr>
<tr>
<td>
<br>
<b>THUMBNAIL SIZE</b><br>
Specify how the originals should be scaled to create thumbnails:<br>
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td bgcolor="#cccccc">
<table cellpadding="3" cellspacing="1" border="0">
<tr>
<td bgcolor="#ffffff"><br></td>
<td bgcolor="#ffffff" nowrap>
<b>METHOD</b></td>
<td bgcolor="#ffffff" nowrap>
<b>SIZE</b></td>
</tr>
<tr>
<td bgcolor="#ffffff" align="center">
<input type="radio" name="thumbnailmethod" value="proportionally"></td>
<td bgcolor="#ffffff" nowrap>
proportional (scale height and width)</td>
<td bgcolor="#ffffff" nowrap>
<select>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
<option>10</option>
<option selected>11</option>
<option>12</option>
<option>13</option>
<option>14</option>
<option>15</option>
<option>16</option>
<option>17</option>
<option>18</option>
<option>19</option>
<option>20</option>
</select> percent</td>
</tr>
<tr>
<td bgcolor="#ffffff" align="center">
<input type="radio" name="thumbnailmethod" value="width" checked></td>
<td bgcolor="#ffffff" nowrap>
standardized width, scaled height</td>
<td bgcolor="#ffffff" nowrap>
<input type="text" size="3" value="75"> pixels wide (proportional height)</td>
</tr>
<tr>
<td bgcolor="#ffffff" align="center">
<input type="radio" name="thumbnailmethod" value="height"></td>
<td bgcolor="#ffffff" nowrap>
standardize height, scaled width</td>
<td bgcolor="#ffffff" nowrap>
<input type="text" size="3" value="75"> pixels high (proportional width)</td>
</tr>
</table></td>
</tr>
</table></td>
</tr>
<tr>
<td>
<br>
<b>INDEX THIS GALLERY</b><br>
<table cellpadding="1" cellspacing="0" border="0">
<tr>
<td bgcolor="#cccccc">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td bgcolor="#ffffff" colspan="3">
<br></td>
<td bgcolor="#ffffff" rowspan="2">
sample 2
</td>
</tr>
<!-- -->
<tr>
<td bgcolor="#ffffff" rowspan="2">
<input type="radio" name="order" value="sample1"></td>
<td bgcolor="#ffffff" rowspan="2">
between
</td>
<td bgcolor="#ffffff" align="bottom">
<img src="[% img_url %]/toparrow.gif" align="bottom" width="14" height="10" border="0"></td>
</tr>
<tr>
<td bgcolor="#ffffff">
<img src="[% img_url %]/bottomarrow.gif" align="top" width="14" height="10" border="0"></td>
<td bgcolor="#ffffff" rowspan="2">
sample 3
</td>
</tr>
<!-- -->
<tr>
<td bgcolor="#ffffff" rowspan="2">
<input type="radio" name="order" value="sample1"></td>
<td bgcolor="#ffffff" rowspan="2">
between
</td>
<td bgcolor="#ffffff">
<img src="[% img_url %]/toparrow.gif" align="bottom" width="14" height="10" border="0"></td>
</tr>
<tr>
<td bgcolor="#ffffff">
<img src="[% img_url %]/bottomarrow.gif" align="top" width="14" height="10" border="0"></td>
<td bgcolor="#ffffff" rowspan="2">
sample 2
</td>
</tr>
<!-- -->
<tr>
<td bgcolor="#ffffff" colspan="3">
<br>
</td>
</tr>
<tr>
<td bgcolor="#ffffff" colspan="4">
<b>or</b> <input type="radio" name="order" value="sample1">hide this gallery.
</td>
</tr>
</table></td>
</tr>
</table></td>
</tr>
<tr>
<td>
<br>
<b>WHAT'S NEXT?</b><br>
<input type="radio" name="nextstep" value="continue" checked><b>review each image</b>, specifying rotation and captioning, or
<br>
<br>
<input type="radio" name="nextstep" value="done"><b>create gallery now</b>, with no image rotations, order changes or captions.
<br>
<br>
<input type="submit" value="Save Changes and Continue...">
</td>
</tr>
</table>
</form>
[% INCLUDE footer.tmpl %]
1.1 lab/share/tmpl/header.tmpl
Index: header.tmpl
===================================================================
<html>
<head>
<title>[ LiveFrame ] Lab</title>
<link rel="stylesheet" href="[% css_url %]/lfstyles.css">
</head>
<body bgcolor="#ffffff" text="#666666" link="#333333" vlink="#333333" alink="#cc0000">
<div align="center">
<pre>
</pre>
1.1 lab/share/tmpl/image.tmpl
Index: image.tmpl
===================================================================
<html>
<head>
<title>[ LiveFrame ] Lab</title>
<link rel="stylesheet" href="[% css_url %]/lfstyles.css">
</head>
<body bgcolor="#ffffff" text="#666666" link="#333333" vlink="#333333" alink="#cc0000">
<div align="center">
<form method="POST" action="[% self_url %]/review">
<pre>
</pre>
<table cellpadding="0" cellspacing="0" border="0" width="550">
<tr>
<td>
<big><b>LiveFrame Lab</b></big><br>
editing: <b>/www/superdeluxe.com/lfdir/sample/dscn1407.jpg</b>
<br>
<br>
</td>
</tr>
<tr>
<td valign="top">
<b>IMAGE CAPTION</b><br>
<textarea rows="2" cols="50" wrap="soft">
</textarea>
<br>
<br>
<b>ROTATE IMAGE</b><br>
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td>
<img src="[% img_url %]/90.gif" width="17" height="13" border="0"></td>
<td><input type="submit" value="90°"></td>
<td> <img src="[% img_url %]/180.gif" width="17" height="19" border="0"></td>
<td><input type="submit" value="180°"></td>
<td> <img src="[% img_url %]/270.gif" width="23" height="19" border="0"></td>
<td><input type="submit" value="270°">
</td>
</tr>
</table><br></td>
</tr>
<tr>
<td>
<table>
<tr>
<td><input type="submit" value="Save Changes, and Continue..."></td>
<td> <b>or</b> </td>
<td><input type="submit" value="Omit This Image, and Continue..."></td>
</tr>
</table></td>
</tr>
</table>
<table cellpadding="10">
<tr>
<td align="center">
<img src="[% img_url %]/dscn5372.jpg" alt="" width="640" height="480" border="0"></td>
</tr>
</table>
</form>
</div>
</body>
</html>
1.1 lab/share/tmpl/notify.tmpl
Index: notify.tmpl
===================================================================
<html>
<head>
<title>[ LiveFrame ] Lab</title>
<link rel="stylesheet" href="[% css_url %]/lfstyles.css">
</head>
<body bgcolor="#ffffff" text="#666666" link="#333333" vlink="#333333" alink="#cc0000">
<div align="center">
<form method="POST" action="[% self_url %]/start">
<pre>
</pre>
<table cellpadding="0" cellspacing="0" border="0" width="550">
<tr>
<td>
<big><b>LiveFrame Lab</b></big><br>
Your announcement has been sent!
<br>
<br></td>
</tr>
<tr>
<td valign="top">
<b>GALLERY LOCATION</b><br>
your new gallery can be accessed directly here:
<br>
<a href="http://www.vagabondage.com/lf/sample" target="newgallery">http://www.vagabondage.com/lf/sample</a>
<br>
(link will open a new window)
<br>
<br>
<input type="submit" value="Create Another Gallery"></td>
</tr>
</table>
</form>
</div>
</body>
</html>
1.1 lab/share/tmpl/review.tmpl
Index: review.tmpl
===================================================================
<html>
<head>
<title>[ LiveFrame ] Lab</title>
<link rel="stylesheet" href="[% css_url %]/lfstyles.css">
<script type="text/javascript" language="JavaScript">
<!--
function openwin(theurl,winname,features) {
window.open(theurl,winname,features);
}
//-->
</script>
</head>
<body bgcolor="#ffffff" text="#666666" link="#333333" vlink="#333333" alink="#cc0000">
<div align="center">
<form method="POST" action="[% self_url %]/confirm">
<pre>
</pre>
<table cellpadding="0" cellspacing="0" border="0" width="550">
<tr>
<td>
<big><b>LiveFrame Lab</b></big><br>
Review and reorder your images.<br>
<br></td>
</tr>
<tr>
<td valign="top">
Insert photos numbered <input type="text" size="5"> through <input type="text" size="5"> after <input type="text" size="5"> <input type="button" value="Move">
<br>
<br>
Insert selected items after <input type="text" size="5"> <input type="button" value="Move">
<br>
<br>
<input type="button" value="Delete Selected">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td bgcolor="#cccccc">
<table cellpadding="3" cellspacing="1" border="0">
<tr>
<td bgcolor="#ffffff">
<b>NO.</b></td>
<td bgcolor="#ffffff">
<b>SELECT</b></td>
<td bgcolor="#ffffff">
<b>MOVE</b></td>
<td bgcolor="#ffffff" nowrap valign="top">
<b>IMAGE</b></td>
<td bgcolor="#ffffff" nowrap valign="top">
<b>CAPTION</b></td>
</tr>
<tr>
<td bgcolor="#ffffff" align="center" valign="top">
1</td>
<td bgcolor="#ffffff" align="center" valign="top">
<input type="checkbox"></td>
<td bgcolor="#ffffff" align="center" valign="top">
<img src="[% img_url %]/up.gif" alt="Move Up" width="17" height="13" border="0"><br>
<img src="[% img_url %]/down.gif" alt="Move Down" width="17" height="13" border="0"></td>
<td bgcolor="#ffffff" nowrap valign="top">
<a href="#" onclick="openwin('dscn5372.jpg','image','resizable=yes,width=640,height=480,left=20,screenx=20,top=20,screeny=20,scrollbars,menubar')"><img src="[% img_url %]/dscn7521.jpg" alt="dscn7521.jpg" width="50" height="33" border="0"></a>
</td>
<td bgcolor="#ffffff" nowrap valign="top">
<textarea rows="2" cols="50" wrap="virtual">here is a caption</textarea></td>
</tr>
<tr>
<td bgcolor="#ffffff" align="center" valign="top">
2</td>
<td bgcolor="#ffffff" align="center" valign="top">
<input type="checkbox"></td>
<td bgcolor="#ffffff" align="center" valign="top">
<img src="[% img_url %]/up.gif" alt="Move Up" width="17" height="13" border="0"><br>
<img src="[% img_url %]/down.gif" alt="Move Down" width="17" height="13" border="0"></td>
<td bgcolor="#ffffff" nowrap valign="top">
<a href="#" onclick="openwin('dscn5372.jpg','image','resizable=yes,width=640,height=480,left=20,screenx=20,top=20,screeny=20,scrollbars,menubar')"><img src="[% img_url %]/dscn7525.jpg" alt="dscn7525.jpg" width="50" height="33" border="0"></a>
</td>
<td bgcolor="#ffffff" nowrap valign="top">
<textarea rows="2" cols="50" wrap="virtual">here is a caption</textarea></td>
</tr>
<tr>
<td bgcolor="#ffffff" align="center" valign="top">
3</td>
<td bgcolor="#ffffff" align="center" valign="top">
<input type="checkbox"></td>
<td bgcolor="#ffffff" align="center" valign="top">
<img src="[% img_url %]/up.gif" alt="Move Up" width="17" height="13" border="0"><br>
<img src="[% img_url %]/down.gif" alt="Move Down" width="17" height="13" border="0"></td>
<td bgcolor="#ffffff" nowrap valign="top">
<a href="#" onclick="openwin('dscn5372.jpg','image','resizable=yes,width=640,height=480,left=20,screenx=20,top=20,screeny=20,scrollbars,menubar')"><img src="[% img_url %]/dscn7531.jpg" alt="dscn7531.jpg" width="50" height="33" border="0"></a>
</td>
<td bgcolor="#ffffff" nowrap valign="top">
<textarea rows="2" cols="50" wrap="virtual">here is a caption</textarea></td>
</tr>
<tr>
<td bgcolor="#ffffff" align="center" valign="top">
4</td>
<td bgcolor="#ffffff" align="center" valign="top">
<input type="checkbox"></td>
<td bgcolor="#ffffff" align="center" valign="top">
<img src="[% img_url %]/up.gif" alt="Move Up" width="17" height="13" border="0"><br>
<img src="[% img_url %]/down.gif" alt="Move Down" width="17" height="13" border="0"></td>
<td bgcolor="#ffffff" nowrap valign="top">
<a href="#" onclick="openwin('dscn5372.jpg','image','resizable=yes,width=640,height=480,left=20,screenx=20,top=20,screeny=20,scrollbars,menubar')"><img src="[% img_url %]/dscn7533.jpg" alt="dscn7533.jpg" width="50" height="33" border="0"></a>
</td>
<td bgcolor="#ffffff" nowrap valign="top">
<textarea rows="2" cols="50" wrap="virtual">here is a caption</textarea></td>
</tr>
<tr>
<td bgcolor="#ffffff" align="center" valign="top">
5</td>
<td bgcolor="#ffffff" align="center" valign="top">
<input type="checkbox"></td>
<td bgcolor="#ffffff" align="center" valign="top">
<img src="[% img_url %]/up.gif" alt="Move Up" width="17" height="13" border="0"><br>
<img src="[% img_url %]/down.gif" alt="Move Down" width="17" height="13" border="0"></td>
<td bgcolor="#ffffff" nowrap valign="top">
<a href="#" onclick="openwin('dscn5372.jpg','image','resizable=yes,width=640,height=480,left=20,screenx=20,top=20,screeny=20,scrollbars,menubar')"><img src="[% img_url %]/dscn7536.jpg" alt="dscn7536.jpg" width="50" height="38" border="0"></a>
</td>
<td bgcolor="#ffffff" nowrap valign="top">
<textarea rows="2" cols="50" wrap="virtual">here is a caption</textarea></td>
</tr>
<tr>
<td bgcolor="#ffffff" align="center" valign="top">
6</td>
<td bgcolor="#ffffff" align="center" valign="top">
<input type="checkbox"></td>
<td bgcolor="#ffffff" align="center" valign="top">
<img src="[% img_url %]/up.gif" alt="Move Up" width="17" height="13" border="0"><br>
<img src="[% img_url %]/down.gif" alt="Move Down" width="17" height="13" border="0"></td>
<td bgcolor="#ffffff" nowrap valign="top">
<a href="#" onclick="openwin('dscn5372.jpg','image','resizable=yes,width=640,height=480,left=20,screenx=20,top=20,screeny=20,scrollbars,menubar')"><img src="[% img_url %]/dscn7539.jpg" alt="dscn7539.jpg" width="50" height="67" border="0"></a>
</td>
<td bgcolor="#ffffff" nowrap valign="top">
<textarea rows="2" cols="50" wrap="virtual">here is a caption</textarea></td>
</tr>
</table></td>
</tr>
</table>
<input type="button" value="Delete Selected">
<br>
<br>
Insert selected items after <input type="text" size="5"> <input type="button" value="Move">
<br>
<br>
Insert photos numbered <input type="text" size="5"> through <input type="text" size="5"> after <input type="text" size="5"> <input type="button" value="Move"></td>
</tr>
<tr>
<td>
<br>
<br>
<br>
<input type="submit" value="Save Changes and Continue...">
</td>
</tr>
</p>
</td>
</tr>
</table></td>
</tr>
</table>
</form>
</div>
</body>
</html>
1.1 lab/share/tmpl/start.tmpl
Index: start.tmpl
===================================================================
[% INCLUDE header.tmpl %]
<form method="POST" action="[% self_url %]/gallery">
<table cellpadding="0" cellspacing="0" border="0" width="550">
<tr>
<td>
<big><b>LiveFrame Lab</b></big><br>
Build a LiveFrame gallery in a few easy steps.
<br>
<br></td>
</tr>
<tr>
<td valign="top">
[% IF errors %]
<p>
<b>ERROR</b><br>
[% FOREACH e = errors.errors %]
[% e | html %]<br>
[% END %]
</p>
[% END %]
<p>
<b>DESTINATION SITE</b><br>
Choose which of your LiveFrame Gallery sites you want to add this gallery to:
</p>
<table cellpadding="6">
<tr>
<td> </td>
<td align="center">
<select name="site_dir">
[% FOREACH dir = site_dirs %]
[% IF dir == site_dir %]
<option selected>[% dir | html %]
[% ELSE %]
<option>[% dir | html %]
[% END %]
[% END %]
</select></td>
</tr>
</table>
<br>
<b>IMAGES TO PROCESS</b><br>
Upload a directory full of images (in jpeg format) to your Uploads Directory (specified in lab.conf) and select it below:
<table cellpadding="6">
<tr>
<td> </td>
<td align="center">
<b>[% upload_dir | html %]</b>
<select name="upload_set_dir">
[% FOREACH dir = upload_set_dirs %]
[% IF dir == upload_set_dir %]
<option selected>[% dir | html %]
[% ELSE %]
<option>[% dir | html %]
[% END %]
[% END %]
</select></td>
</tr>
</table>
<br>
<br>
<input name="form_start_save" type="submit" value="Save Changes and Continue...">
</td>
</tr>
</table>
</form>
[% INCLUDE footer.tmpl %]
1.1 lab/share/web/lfstyles.css
Index: lfstyles.css
===================================================================
table, tr, td, p, div {font-size: 10px; font-family: Verdana, Arial, Helvetica, sans-serif;}
big {font-size: 12px; font-family: Verdana, Arial, Helvetica, sans-serif;}
a {text-decoration: none;}
a:hover {color: cc0000;}
1.1 lab/share/web/img/180.gif
<<Binary file>>
1.1 lab/share/web/img/270.gif
<<Binary file>>
1.1 lab/share/web/img/90.gif
<<Binary file>>
1.1 lab/share/web/img/bottomarrow.gif
<<Binary file>>
1.1 lab/share/web/img/down.gif
<<Binary file>>
1.1 lab/share/web/img/toparrow.gif
<<Binary file>>
1.1 lab/share/web/img/up.gif
<<Binary file>>
|
|
From: <ix...@us...> - 2001-11-30 00:52:44
|
ixjonez 01/11/29 16:52:44 lab/share/web/img - New directory |
|
From: <ix...@us...> - 2001-11-30 00:52:37
|
ixjonez 01/11/29 16:52:36 lab/share/web - New directory |
|
From: <ix...@us...> - 2001-11-30 00:52:37
|
ixjonez 01/11/29 16:52:36 lab/share/docs - New directory |
|
From: <ix...@us...> - 2001-11-30 00:52:37
|
ixjonez 01/11/29 16:52:36 lab/share/tmpl - New directory |
|
From: <ix...@us...> - 2001-11-30 00:52:26
|
ixjonez 01/11/29 16:52:25 lab/lib/LiveFrame/Lab - New directory |
|
From: <ix...@us...> - 2001-11-30 00:52:17
|
ixjonez 01/11/29 16:52:16 lab/lib/Bundle/LiveFrame - New directory |
|
From: <ix...@us...> - 2001-11-30 00:52:09
|
ixjonez 01/11/29 16:52:08 lab/lib/LiveFrame - New directory |
|
From: <ix...@us...> - 2001-11-30 00:52:09
|
ixjonez 01/11/29 16:52:08 lab/lib/Bundle - New directory |
|
From: <ix...@us...> - 2001-11-30 00:51:59
|
ixjonez 01/11/29 16:51:58 lab/share - New directory |
|
From: <ix...@us...> - 2001-11-30 00:51:59
|
ixjonez 01/11/29 16:51:58 lab/lib - New directory |
|
From: <ix...@us...> - 2001-11-30 00:51:58
|
ixjonez 01/11/29 16:51:58 lab/etc - New directory |
|
From: <ix...@us...> - 2001-11-30 00:51:49
|
ixjonez 01/11/29 16:51:48 lab/cgi-bin - New directory |
|
From: <ix...@us...> - 2001-11-29 23:28:13
|
ixjonez 01/11/29 15:28:13 Log: created lab module Status: Vendor Tag: LIVEFRAME Release Tags: INIT No conflicts created by this import |
|
From: <ix...@us...> - 2001-11-29 23:22:24
|
ixjonez 01/11/29 15:22:23 Log: imported LiveFrame Gallery 0.94e Status: Vendor Tag: SUPERDELUXE Release Tags: rel-0_94e N gallery/liveframe.cgi N gallery/index.html N gallery/lfdir/index.html N gallery/lfdir/templates/display.tmpl N gallery/lfdir/templates/error.tmpl N gallery/lfdir/templates/navsize.tmpl N gallery/lfdir/templates/photononav.tmpl N gallery/lfdir/templates/lfstyles.css N gallery/lfdir/templates/starttop.tmpl N gallery/lfdir/templates/frameset.tmpl N gallery/lfdir/templates/galleryindextop.tmpl N gallery/lfdir/templates/galleryindexbottom.tmpl N gallery/lfdir/templates/galleryindexitem.tmpl N gallery/lfdir/templates/startbottom.tmpl N gallery/lfdir/templates/startmiddle.tmpl N gallery/lfdir/templates/photo.tmpl N gallery/lfdir/templates/navright.tmpl N gallery/lfdir/templates/navleft.tmpl N gallery/lfdir/templates/navslide.tmpl N gallery/lfdir/templates/previewtop.tmpl N gallery/lfdir/templates/previewbottom.tmpl N gallery/lfdir/templates/previewmiddle.tmpl N gallery/lfdir/templates/index.html N gallery/lfdir/templates/img/useslideshow.gif N gallery/lfdir/templates/img/dotgrey.gif N gallery/lfdir/templates/img/dotwhite.gif N gallery/lfdir/templates/img/forward.gif N gallery/lfdir/templates/img/hidenav.gif N gallery/lfdir/templates/img/left.gif N gallery/lfdir/templates/img/leftgal.gif N gallery/lfdir/templates/img/leftsm.gif N gallery/lfdir/templates/img/liveframe.gif N gallery/lfdir/templates/img/resize.gif N gallery/lfdir/templates/img/right.gif N gallery/lfdir/templates/img/rightgal.gif N gallery/lfdir/templates/img/rightsm.gif N gallery/lfdir/templates/img/shownav.gif N gallery/lfdir/templates/img/no.gif N gallery/lfdir/templates/img/slideshow.gif N gallery/lfdir/templates/img/slideshowpause.gif N gallery/lfdir/templates/img/usearrows.gif N gallery/lfdir/templates/img/usepreviews.gif N gallery/lfdir/templates/img/back.gif N gallery/lfdir/galleries/hidden.conf N gallery/lfdir/galleries/order.conf N gallery/lfdir/galleries/sample/config N gallery/lfdir/galleries/sample/display/water.jpg N gallery/lfdir/galleries/sample/display/engine.jpg N gallery/lfdir/galleries/sample/display/engineless.jpg N gallery/lfdir/galleries/sample/display/jal.jpg N gallery/lfdir/galleries/sample/display/site.jpg N gallery/lfdir/galleries/sample/display/tenerife.jpg N gallery/lfdir/galleries/sample/display/united.jpg N gallery/lfdir/galleries/sample/display/boac.jpg N gallery/lfdir/galleries/sample/preview/water.jpg N gallery/lfdir/galleries/sample/preview/engine.jpg N gallery/lfdir/galleries/sample/preview/engineless.jpg N gallery/lfdir/galleries/sample/preview/jal.jpg N gallery/lfdir/galleries/sample/preview/site.jpg N gallery/lfdir/galleries/sample/preview/tenerife.jpg N gallery/lfdir/galleries/sample/preview/united.jpg N gallery/lfdir/galleries/sample/preview/boac.jpg N gallery/lfdir/galleries/sample2/config N gallery/lfdir/galleries/sample2/large/lagoonnebula.jpg N gallery/lfdir/galleries/sample2/large/cygnusloop.jpg N gallery/lfdir/galleries/sample2/large/etacarinae.jpg N gallery/lfdir/galleries/sample2/large/abell2218.jpg N gallery/lfdir/galleries/sample2/large/m100nucleus.jpg N gallery/lfdir/galleries/sample2/large/nebulam2-9.jpg N gallery/lfdir/galleries/sample2/large/ngc4039.jpg N gallery/lfdir/galleries/sample2/preview/lagoonnebula.jpg N gallery/lfdir/galleries/sample2/preview/cygnusloop.jpg N gallery/lfdir/galleries/sample2/preview/etacarinae.jpg N gallery/lfdir/galleries/sample2/preview/abell2218.jpg N gallery/lfdir/galleries/sample2/preview/m100nucleus.jpg N gallery/lfdir/galleries/sample2/preview/nebulam2-9.jpg N gallery/lfdir/galleries/sample2/preview/ngc4039.jpg N gallery/lfdir/galleries/sample2/small/lagoonnebula.jpg N gallery/lfdir/galleries/sample2/small/cygnusloop.jpg N gallery/lfdir/galleries/sample2/small/etacarinae.jpg N gallery/lfdir/galleries/sample2/small/abell2218.jpg N gallery/lfdir/galleries/sample2/small/m100nucleus.jpg N gallery/lfdir/galleries/sample2/small/nebulam2-9.jpg N gallery/lfdir/galleries/sample2/small/ngc4039.jpg N gallery/lfdir/galleries/sample3/config N gallery/lfdir/galleries/sample3/display/eleanorroosevelt.jpg N gallery/lfdir/galleries/sample3/display/ellenaxson.jpg N gallery/lfdir/galleries/sample3/display/jacquelinebouvierkennedy.jpg N gallery/lfdir/galleries/sample3/display/mamieeisenhower.jpg N gallery/lfdir/galleries/sample3/display/patnixon.jpg N gallery/lfdir/galleries/sample3/display/rosalynncarter.jpg N gallery/lfdir/galleries/sample3/preview/eleanorroosevelt.jpg N gallery/lfdir/galleries/sample3/preview/ellenaxson.jpg N gallery/lfdir/galleries/sample3/preview/jacquelinebouvierkennedy.jpg N gallery/lfdir/galleries/sample3/preview/mamieeisenhower.jpg N gallery/lfdir/galleries/sample3/preview/patnixon.jpg N gallery/lfdir/galleries/sample3/preview/rosalynncarter.jpg N gallery/docs/COPYING N gallery/docs/UPGRADE N gallery/docs/README N gallery/docs/INSTALL N gallery/docs/CHANGES No conflicts created by this import |