Merge branch 'WebGUI8' of github.com:plainblack/webgui into WebGUI8

This commit is contained in:
JT Smith 2010-09-01 12:16:45 -05:00
commit 83c2629ab7
35 changed files with 183 additions and 754 deletions

View file

@ -1131,6 +1131,8 @@ Get the AssetHelpers for this asset.
sub getHelpers {
my ( $self ) = @_;
my $session = $self->session;
my ( $conf ) = $session->quick(qw{ config });
my $default = [
{
@ -1171,6 +1173,20 @@ sub getHelpers {
},
];
# Get additional helpers for this class from config
my $confHelpers = $conf->get('assets/' . $self->className . '/helpers');
# Merge on label
for my $helper ( @$confHelpers ) {
WebGUI::Macro::process( \$helper->{label} );
if ( my $replace = first { $_->{label} eq $helper->{label} } @$default ) {
$replace = $helper; # replace in the default arrayref
}
else {
push @$default, $helper;
}
}
return $default;
}

View file

@ -478,24 +478,6 @@ sub www_view { $_[0]->ems->www_viewSubmissionQueue }
#-------------------------------------------------------------------
=head2 getEditTabs ( )
defines 2 new tabs.
the shop tab is created here to mimic the function of the sku-created
shop tab. this class holds data like Sku assets so that they can be assigned
in the future when the sku asset is created from this data.
override getEditTabs => sub {
my $self = shift;
my $sku_i18n = WebGUI::International->new($self->session,"Asset_Sku");
return (super(), ['shop', $sku_i18n->get('shop'), 9],);
};
=cut
#-------------------------------------------------------------------
=head2 getQueueUrl
returns the URL for the submission queue page with the submisison id in the hash part

View file

@ -214,21 +214,6 @@ override getEditForm => sub {
#-------------------------------------------------------------------
=head2 getEditTabs ( )
Not to be modified, just defines a new tab.
override getEditTabs => sub {
my $self = shift;
my $i18n = WebGUI::International->new($self->session,"Asset_Sku");
return (super(), ['shop', $i18n->get('shop'), 9]);
};
=cut
#-------------------------------------------------------------------
=head2 getOptions ( )
Returns a hash reference of configuration data that can return this sku to a configured state. See also applyOptions().

View file

@ -534,20 +534,6 @@ sub deleteFeed {
#----------------------------------------------------------------------------
=head2 getEditTabs ( )
Add the feeds tab to the edit form
=cut
sub getEditTabs {
my ( $self ) = @_;
my $i18n = WebGUI::International->new($self->session,"Asset_Calendar");
return $self->SUPER::getEditTabs, ["feeds",$i18n->get("feeds"), 6];
}
#----------------------------------------------------------------------------
=head2 getEvent ( assetId )
Gets an Event object from the database. Returns a WebGUI::Asset::Event object

View file

@ -978,21 +978,6 @@ sub duplicateBranch {
#-------------------------------------------------------------------
=head2 getEditTabs
Add a tab for the mail interface.
sub getEditTabs {
my $self = shift;
my $i18n = WebGUI::International->new($self->session,"Asset_Collaboration");
return ($self->next::method, ['mail', $i18n->get('mail'), 9]);
}
=cut
#-------------------------------------------------------------------
=head2 getNewThreadUrl( )
Formats the url to start a new thread.

View file

@ -141,21 +141,6 @@ sub getDateFormat {
#----------------------------------------------------------------------------
=head2 getEditTabs ( )
Add a tab for the data table.
=cut
sub getEditTabs {
my $self = shift;
my $i18n = WebGUI::International->new( $self->session, "Asset_DataTable" );
return ( $self->SUPER::getEditTabs, [ "data" => $i18n->get("tab label data") ], );
}
#----------------------------------------------------------------------------
=head2 getTemplateVars ( )
Get the template vars for this asset.

View file

@ -148,6 +148,15 @@ sub get_all_property_list {
return @names;
}
#-------------------------------------------------------------------
=head2 get_all_settable_list ( )
Returns an array of the names of all Properties, in all classes, in the order they were
created in the Definition, that have the WebGUI::Definition::Meta::Settable role applied.
=cut
sub get_all_settable_list {
my $self = shift;
my @names = ();

View file

@ -225,6 +225,54 @@ sub _processParameters {
return \@params;
}
=head2 transform ( $session, \$content, $sub )
Transforms the macro calls in $content accoring to $sub. For each macro call found, $sub will be called with a hash of information about the call. The return value of the sub should be either undef to leave the macro call untouched, or a string to replace the macro call with. Macros are not processed recursively. If recursive processing is needed, trannsform can be called again inside $sub.
=head3 $session
The WebGUI session to use.
=head3 \$content
A reference to a string to transform macros in. The string will be modified in place.
=head3 $sub
A sub reference to call for each macro call.
The hash passed to $sub will contain:
=over 4
=item session
The session passed in.
=item macro
The name of the macro called.
=item macroPackage
The module name for the macro from the config file.
=item originalString
The full original text of the macro call.
=item parameters
An array reference to the parameters passed to the macro.
=item parameterString
The full original text of the parameters.
=back
=cut
sub transform {
my $session = shift;
my $content = shift;
@ -251,7 +299,7 @@ sub _transformMacro {
session => $session,
macro => $macro,
macroPackage => $macroPackage,
originalText => $original,
originalString => $original,
parameters => $params,
parameterString => $paramString,
});

View file

@ -204,6 +204,7 @@ sub preloadExclude {
my $class = shift;
my @excludes = _readTextLines($class->preloadExclusions);
push @excludes, 'WebGUI::Upgrade', 'WebGUI::Upgrade::*';
push @excludes, 'WebGUI::Test', 'WebGUI::Test::*';
return @excludes;
}

View file

@ -593,23 +593,4 @@ sub www_viewRss {
return $self->getFeed( XML::FeedPP::RSS->new )->to_string;
}
#-------------------------------------------------------------------
=head2 getEditTabs ()
Adds an RSS tab to the Edit Tabs.
around getEditTabs => sub {
my $orig = shift;
my $self = shift;
my $tabs = $self->$orig(@_);
my $i18n = WebGUI::International->new($self->session,'AssetAspect_RssFeed');
push @{ $tabs }, ['rss', $i18n->get('RSS tab'), 1];
return $tabs;
};
=cut
1;

View file

@ -26,42 +26,54 @@ use strict;
use warnings;
use base qw(Test::Builder::Module);
use Log::Log4perl;
use Test::MockObject;
use Test::MockObject::Extends;
use Log::Log4perl; # load early to ensure proper order of END blocks
use Test::MockObject::Extends;
use Clone qw(clone);
use File::Basename qw(dirname fileparse);
use File::Spec::Functions qw(abs2rel rel2abs catdir catfile updir);
use File::Spec::Functions qw(abs2rel rel2abs catdir catfile updir splitdir);
use IO::Handle ();
use IO::Select ();
use Cwd ();
use Cwd qw( realpath );
use Scalar::Util qw( blessed );
use Carp qw( carp croak );
use List::MoreUtils qw(any);
use File::Copy ();
use File::Temp ();
use Try::Tiny;
use WebGUI::PseudoRequest;
use Scope::Guard;
use Try::Tiny;
use WebGUI::Paths -inc;
use namespace::clean;
our $WEBGUI_TEST_ROOT = rel2abs( catdir( dirname( __FILE__ ), (updir) x 2 ) );
our $WEBGUI_TEST_COLLATERAL = catdir(
$WEBGUI_TEST_ROOT,
'supporting_collateral'
);
our @EXPORT = qw(cleanupGuard addToCleanup);
our @EXPORT_OK = qw(session config collateral);
my $CLASS = __PACKAGE__;
my $test_collateral;
my $original_config_file;
sub import {
my $test_dir = realpath( dirname( rel2abs( (caller 0)[1] ) ) );
while ( 1 ) {
if ( (splitdir($test_dir))[-1] eq 't') {
my $lib_dir = catdir($test_dir, 'lib');
if ( -d $lib_dir ) {
$test_collateral = catdir(
$test_dir,
'supporting_collateral'
);
unshift @INC, $lib_dir;
}
last;
}
my $next_dir = realpath( catdir( $test_dir, updir ) );
if ( $test_dir eq $next_dir ) {
last;
}
$test_dir = $next_dir;
}
if ( ! $original_config_file ) {
my $config = $ENV{WEBGUI_CONFIG};
die "Enviroment variable WEBGUI_CONFIG must be set to the full path to a WebGUI config file.\n"
@ -395,7 +407,7 @@ Optionally adds a filename to the end.
sub getTestCollateralPath {
my $class = shift;
my @path = @_;
return catfile(our $WEBGUI_TEST_COLLATERAL, @path);
return catfile($test_collateral, @path);
}
sub collateral {
@ -410,8 +422,9 @@ Returns the full path to the WebGUI lib directory, usually /data/WebGUI/lib.
=cut
my $webgui_lib = realpath( catdir( dirname( __FILE__ ), (updir) x 3 ) );
sub lib {
return catdir( $WEBGUI_TEST_ROOT, updir, 'lib' );
return $webgui_lib;
}
#----------------------------------------------------------------------------

View file

@ -41,11 +41,17 @@ my @cleanups;
sub _build_exports {
my $configFile = $ENV{WEBGUI_CONFIG}
or die 'WEBGUI_CONFIG environment variable must be specified';
my $version = $ENV{WEBGUI_UPGRADE_VERSION}
or die 'WEBGUI_UPGRADE_VERSION must be set';
my $version = $ENV{WEBGUI_UPGRADE_VERSION};
my $upgrade_file = $caller_upgrade_file;
(my $vol, my $dir, my $shortname) = File::Spec->splitpath( $upgrade_file );
$shortname =~ s/\.[^.]*$//;
my $last_dir = (File::Spec->splitdir($dir))[-1];
if ( !$version && $last_dir =~ /\A\d+\.\d+\.\d+-(\d+\.\d+\.\d+)\z/msx ) {
$version = $1;
}
if (! $version) {
die 'WEBGUI_UPGRADE_VERSION must be set';
}
# need to be able to reference these directly in the cleanup code
my $session;

Binary file not shown.

View file

@ -1,8 +1,6 @@
use WebGUI::Upgrade::Script;
report "\tRunning an upgrade step...";
# if (! quiet) { ... }
start_step "Running an upgrade step";
# clear_cache;

View file

@ -43,8 +43,6 @@ foreach my $macro (qw/
}
$session->config->addToHash('macros', "Ex'tras", "Extras");
plan tests => 51;
my $macroText = "CompanyName: ^c;";
my $companyName = $session->setting->get('companyName');
WebGUI::HTML::makeParameterSafe( \$companyName );
@ -337,3 +335,31 @@ is (
'@MacroCall[`1`.` 2`.`3`]:',
'internal spaces are okay'
);
my $macroText = 'before ^VisualMacro("1", 2,); after';
my $macroData;
WebGUI::Macro::transform($session, \$macroText, sub {
$macroData = shift;
return "replace";
});
is (
$macroText,
'before replace after',
'transform replaces macro calls'
);
is_deeply($macroData, {
session => $session,
macro => 'VisualMacro',
macroPackage => 'WebGUI::Macro::VisualMacro',
originalString => '^VisualMacro("1", 2,);',
parameters => [
'1',
' 2',
],
parameterString => '("1", 2,)',
}, 'transform passes sub correct data');
done_testing;

View file

@ -13,7 +13,6 @@ use strict;
use lib "$FindBin::Bin/../lib";
use WebGUI::Test;
use WebGUI::PseudoRequest;
use WebGUI::Session;
use HTML::TokeParser;
use DateTime;

View file

@ -418,7 +418,7 @@ $tarStorage->addFileFromFilesystem(WebGUI::Test->getTestCollateralPath('extensio
my $extensionStorage = $tarStorage->untar('extensions.tar');
WebGUI::Test->addToCleanup($extensionStorage);
use Data::Dumper;
diag Dumper $extensionStorage->getFiles;
note Dumper $extensionStorage->getFiles;
cmp_bag(
$extensionStorage->getFiles,
[ qw{ extension_pm.txt extension_perl.txt extension_html.txt extensions extensions/extension_html.txt }],

View file

@ -1,441 +0,0 @@
package WebGUI::PseudoRequest;
=head1 LEGAL
-------------------------------------------------------------------
WebGUI is Copyright 2001-2009 Plain Black Corporation.
-------------------------------------------------------------------
Please read the legal notices (docs/legal.txt) and the license
(docs/license.txt) that came with this distribution before using
this software.
-------------------------------------------------------------------
http://www.plainblack.com info@plainblack.com
-------------------------------------------------------------------
=cut
use strict;
use Test::MockObject;
BEGIN {
Test::MockObject->fake_module(
'Apache2::Cookie',
new => sub {
my $class = shift;
my $self = Test::MockObject->new;
$self->set_isa($class);
$self->set_true(qw(expires domain bake));
},
);
Test::MockObject->fake_module('APR::Request::Apache2',
handle => sub {
return $_[1];
},
);
}
use WebGUI::PseudoRequest::Headers;
use WebGUI::PseudoRequest::Upload;
=head1 NAME
Package WebGUI::PseudoRequest
=head1 DESCRIPTION
This is an almost complete imitation of Apache2::Request. You can use this package to
create a request object that will work with WebGUI, without actually being inside
the mod_perl environment.
Why in the world would you want to do this? Well, when doing API testing sometimes
you run across things that require a request object, but you don't really want to
fire up Apache in order to do it. This will let you bypass that.
=head2 new
Construct a new PseudoRequest object. Creates a new Headers object as well and places
it inside the PseudoRequest object.
=cut
sub new {
my $this = shift;
my $class = ref($this) || $this;
my $headers = WebGUI::PseudoRequest::Headers->new();
my $self = { headers_out => $headers, headers_in => {} };
bless $self, $class;
return $self;
}
#----------------------------------------------------------------------------
=head2 body ( [$value])
Compatibility method. Returns the requested form value, $value. If $value isn't passed in, returns
all form variables.
=cut
sub body {
my $self = shift;
my $value = shift;
if ( !defined $value ) {
return if !$self->{body};
return keys %{ $self->{body} } if wantarray;
return { %{ $self->{body} } };
}
if ($self->{body}->{$value}) {
if (wantarray && ref $self->{body}->{$value} eq "ARRAY") {
return @{$self->{body}->{$value}};
}
elsif (ref $self->{body}->{$value} eq "ARRAY") {
return $self->{body}->{$value}->[0];
}
else {
return $self->{body}->{$value};
}
}
else {
if (wantarray) {
return ();
}
else {
return undef;
}
}
}
#----------------------------------------------------------------------------
=head2 setup_body ( $value )
Setup the object's body method so that it can be used. $value should be a hash ref of named
form variables and values.
=cut
sub setup_body {
my $self = shift;
my $value = shift;
$self->{body} = $value;
}
#----------------------------------------------------------------------------
=head2 content_type ( [$value] )
Getter and setter for content_type. If $value is passed in, it will set the content_type of
the object to that. Returns the content_type stored in the object.
=cut
sub content_type {
my $self = shift;
my $value = shift;
if (defined $value) {
$self->{content_type} = $value;
}
return $self->{content_type};
}
#----------------------------------------------------------------------------
=head2 headers_in ( )
Mimics the behavior of Apache2::Request->headers_in.
=cut
sub headers_in {
my $self = shift;
return $self->{headers_in};
}
#----------------------------------------------------------------------------
=head2 headers_out ( )
Returns the PseudoRequst::Headers object stored in $self for access to the headers.
=cut
sub headers_out {
my $self = shift;
return $self->{headers_out}; ##return object for method chaining
}
#----------------------------------------------------------------------------
=head2 no_cache ( [$value] )
Getter and setter for no_cache. If $value is passed in, it will set no_cache of
the object to that. Returns the no_cache value stored in the object.
=cut
sub no_cache {
my $self = shift;
my $value = shift;
if (defined $value) {
$self->{no_cache} = $value;
}
return $self->{no_cache};
}
#----------------------------------------------------------------------------
=head2 param ( [$value])
Compatibility method. Works exactly like the body method.
=cut
sub param {
my $self = shift;
$self->body(@_);
}
#----------------------------------------------------------------------------
=head2 setup_param ( $value )
Setup the object's param method so that it can be used. $value should be a hash ref of named
form variables and values.
=cut
sub setup_param {
my $self = shift;
$self->setup_body(@_);
}
#----------------------------------------------------------------------------
=head2 clear_output ( )
Clear the internally cached request output generated by calling the
C<print> method.
=cut
sub clear_output {
my $self = shift;
$self->{output} = '';
}
#----------------------------------------------------------------------------
=head2 get_output ( )
Get the internally cached request output generated by calling the
C<print> method. Returns it as a scalar.
=cut
sub get_output {
my $self = shift;
return $self->{output};
}
#----------------------------------------------------------------------------
=head2 method ( [ $method ] )
Getter/setter for the HTTP request method.
=cut
sub method {
my ($self, $newMethod) = @_;
my $method = $self->{method};
if (defined $newMethod) {
$self->{method} = $newMethod;
}
return $method;
}
#----------------------------------------------------------------------------
=head2 print ( @values )
Fake print method for the PseudoRequest object. It caches everything printed
to it by concatenating @values together, just like print would. Use clear_output
to clear the cached value, and get_output to access it.
=cut
sub print {
my $self = shift;
$self->{output} .= join '', @_;
return 1;
}
#----------------------------------------------------------------------------
=head2 protocol ( $value )
Getter and setter for protocol. If $value is passed in, it will set the protocol of
the object to that. Returns the protocol value stored in the object.
=cut
sub protocol {
my $self = shift;
my $value = shift;
if (defined $value) {
$self->{protocol} = $value;
}
return $self->{protocol};
}
#----------------------------------------------------------------------------
=head2 status ( $value )
Getter and setter for status. If $value is passed in, it will set the status of
the object to that. Returns the status value stored in the object.
=cut
sub status {
my $self = shift;
my $value = shift;
if (defined $value) {
$self->{status} = $value;
}
return $self->{status};
}
#----------------------------------------------------------------------------
=head2 status_line ( $value )
Getter and setter for status_line. If $value is passed in, it will set the status_line of
the object to that. Returns the status_line value stored in the object.
=cut
sub status_line {
my $self = shift;
my $value = shift;
if (defined $value) {
$self->{status_line} = $value;
}
return $self->{status_line};
}
#----------------------------------------------------------------------------
=head2 upload ( $formName, [ $uploadFileHandler ] )
Getter and setter for upload objects, which are indexed in this object by $formName.
Returns what was stored in the slot referred to as $formName. If $formName is false,
it returns undef.
=head3 $uploadFileHandle.
$uploadFileHandle should be an array ref of WebGUI::PseudoRequest::Upload objects. If you
pass it $uploadFileHandle, it will set store the object under the name, $formName.
=cut
sub upload {
my $self = shift;
my $formName = shift;
my $uploadFileHandles = shift;
return unless $formName;
if (defined $uploadFileHandles) {
$self->{uploads}->{$formName} = $uploadFileHandles;
}
return @{ $self->{uploads}->{$formName} };
}
#----------------------------------------------------------------------------
=head2 uploadFiles ( $formName, $filesToUpload )
Convenience method for uploading several files at once into the PseudoRequest object,
all to be referenced off of $formName. If $formName is false, it returns undef.
=head3 $fileToUpload
$uploadFileHandle should be an array ref of complete paths to files. The method will
create one PseudoRequest::Upload object per file, then store the array ref
using the upload method.
=cut
sub uploadFiles {
my $self = shift;
my $formName = shift;
my $filesToUpload = shift;
return unless $formName;
return unless scalar $filesToUpload;
my @uploadObjects = ();
foreach my $file (@{ $filesToUpload }) {
my $upload = WebGUI::PseudoRequest::Upload->new($file);
push @uploadObjects, $upload;
}
$self->upload($formName, \@uploadObjects);
}
#----------------------------------------------------------------------------
=head2 uri ( $value )
Getter and setter for uri. If $value is passed in, it will set the uri of
the object to that. Returns the uri value stored in the object.
=cut
sub uri {
my $self = shift;
my $value = shift;
if (defined $value) {
$self->{uri} = $value;
}
return $self->{uri};
}
#----------------------------------------------------------------------------
=head2 user ( $value )
Getter and setter for user. If $value is passed in, it will set the user of
the object to that. Returns the user value stored in the object.
=cut
sub user {
my $self = shift;
my $value = shift;
if (defined $value) {
$self->{user} = $value;
}
return $self->{user};
}
#----------------------------------------------------------------------------
=head2 jar ( $value )
Getter and setter for cookie jar. If $value is passed in, it will
set the cookie jar of the object to that. Returns the cookie jar
hash.
=cut
sub jar {
my $self = shift;
my $value = shift;
if (defined $value) {
$self->{jar} = $value;
}
return $self->{jar};
}
1;

View file

@ -1,67 +0,0 @@
package WebGUI::PseudoRequest::Headers;
=head1 LEGAL
-------------------------------------------------------------------
WebGUI is Copyright 2001-2009 Plain Black Corporation.
-------------------------------------------------------------------
Please read the legal notices (docs/legal.txt) and the license
(docs/license.txt) that came with this distribution before using
this software.
-------------------------------------------------------------------
http://www.plainblack.com info@plainblack.com
-------------------------------------------------------------------
=cut
use strict;
=head1 NAME
Package WebGUI::PseudoRequest::Headers
=head2 new
Construct a new PseudoRequest::Headers object. This is just for holding headers.
It doesn't do any magic.
=cut
sub new {
my $this = shift;
my $class = ref($this) || $this;
my $self = { headers => {} };
bless $self, $class;
return $self;
}
#----------------------------------------------------------------------------
=head2 set( $key, $value )
Set a key, value pair in the header object.
=cut
sub set {
my $self = shift;
my $key = shift;
my $value = shift;
$self->{headers}->{$key} = $value;
}
#----------------------------------------------------------------------------
=head2 fetch
Returns the entire internal hashref of headers.
=cut
sub fetch {
my $self = shift;
return $self->{headers};
}
1;

View file

@ -1,119 +0,0 @@
package WebGUI::PseudoRequest::Upload;
=head1 LEGAL
-------------------------------------------------------------------
WebGUI is Copyright 2001-2009 Plain Black Corporation.
-------------------------------------------------------------------
Please read the legal notices (docs/legal.txt) and the license
(docs/license.txt) that came with this distribution before using
this software.
-------------------------------------------------------------------
http://www.plainblack.com info@plainblack.com
-------------------------------------------------------------------
=cut
use strict;
use File::Copy ();
=head1 NAME
Package WebGUI::PseudoRequest::Upload
=head2 new ( [$file] )
Construct a new PseudoRequest::Upload object. This is just for holding headers.
It doesn't do any magic.
=head3 $file
The complete path to a file. If this is sent to new, it will go ahead and open
a filehandle to that file for you, saving you the need to call the fh, filename
and filesize methods.
=cut
sub new {
my $this = shift;
my $class = ref($this) || $this;
my $self = {
fh => undef,
size => 0,
filename => '',
output => '',
};
my $file = shift;
if ($file and -e $file) {
$self->{filename} = $file;
$self->{size} = (stat $file)[7];
open my $fh, '<' . $file or
die "Unable to open $file for reading and creating a filehandle: $!\n";
$self->{fh} = $fh;
}
bless $self, $class;
return $self;
}
#----------------------------------------------------------------------------
=head2 fh ( [$value] )
Getter and setter for fh. If $value is passed in, it will set the internal filehandle in
the object to that. Returns the filehandle stored in the object.
=cut
sub fh {
my $self = shift;
my $value = shift;
if (defined $value) {
$self->{fh} = $value;
}
return $self->{fh};
}
#----------------------------------------------------------------------------
=head2 filaname ( [$value] )
Getter and setter for filename. If $value is passed in, it will set the filename in
the object to that. Returns the filename in the object.
=cut
sub filename {
my $self = shift;
my $value = shift;
if (defined $value) {
$self->{filename} = $value;
}
return $self->{filename};
}
#----------------------------------------------------------------------------
=head2 size ( [$value] )
Getter and setter for size. If $value is passed in, it will set the internal size in
the object to that. Returns the size stored in the object.
=cut
sub size {
my $self = shift;
my $value = shift;
if (defined $value) {
$self->{size} = $value;
}
return $self->{size};
}
sub link {
my $self = shift;
my $dest = shift;
return File::Copy::copy($self->filename, $dest);
}
1;

View file

@ -217,7 +217,7 @@ input.disabled {
margin: 0; padding: 0;
}
#viewTab iframe {
#tab_content_wrapper iframe {
border: none;
width: 100%;
height: 100%;

View file

@ -531,7 +531,7 @@ WebGUI.Admin.prototype.requestHelper
var callback = {
success : function (o) {
var resp = YAHOO.lang.JSON.parse( o.responseText );
this.processHelper( resp );
this.processPlugin( resp );
},
failure : function (o) {
@ -544,17 +544,18 @@ WebGUI.Admin.prototype.requestHelper
};
/**
* processHelper( response )
* Process the helper response. Possible responses include:
* processPlugin( response )
* Process the plugin response. Possible responses include:
* message : A message to the user
* error : An error message
* openDialog : Open a dialog with the given URL
* openTab : Open a tab with the given URL
* redirect : Redirect the View pane to the given URL
* scriptFile : Load a JS file
* scriptFunc : Run a JS function. Used with scriptFile
* scriptArgs : Arguments to scriptFunc. Used with scriptFile
*/
WebGUI.Admin.prototype.processHelper
WebGUI.Admin.prototype.processPlugin
= function ( resp ) {
if ( resp.openTab ) {
this.openTab( resp.openTab );
@ -572,7 +573,7 @@ WebGUI.Admin.prototype.processHelper
this.showInfoMessage( resp.error );
}
else {
alert( "Unknown helper response: " + YAHOO.lang.JSON.stringify(resp) );
alert( "Unknown plugin response: " + YAHOO.lang.JSON.stringify(resp) );
}
};
@ -735,6 +736,41 @@ WebGUI.Admin.prototype.addHistoryHandler
YAHOO.util.Event.on( elem, "click", function(){ self.gotoAsset( url ) }, self, true );
};
/**
* openTab ( url )
* Open a new tab with an iframe and the given URL
*/
WebGUI.Admin.prototype.openTab
= function ( url ) {
// Prepare the iframe first
var iframe = document.createElement( 'iframe' );
iframe.src = url;
YAHOO.util.Event.on( iframe, 'load', function(){ this.updateTabLabel(newTab); }, this, true );
// Prepare the tab
var newTab = new YAHOO.widget.Tab({
label : "Loading...",
content : ''
});
newTab.get('contentEl').appendChild( iframe );
// Fire when ready, Gridley
this.tabBar.addTab( newTab );
};
/**
* updateTabLabel( tab )
* Update the tab's label with the title from the iframe inside
*/
WebGUI.Admin.prototype.updateTabLabel
= function ( tab ) {
// Find the iframe
var iframe = tab.get('contentEl').getElementsByTagName( 'iframe' )[0];
var title = iframe.contentDocument.title;
tab.set( 'label', title );
};
/****************************************************************************
* WebGUI.Admin.LocationBar
*/