[interchange-cvs] interchange - heins modified 60 files

interchange-core@interchange.redhat.com interchange-core@interchange.redhat.com
Sat Feb 16 04:40:00 2002


User:      heins
Date:      2002-02-16 09:39:11 GMT
Modified:  .        MANIFEST
Modified:  code/SystemTag attr_list.coretag warnings.coretag
Modified:  code/UI_Tag content_editor.coretag display.coretag
Modified:           file_navigator.coretag su.coretag
Modified:           table_editor.coretag uneval.coretag
Modified:  dist/foundation catalog.cfg
Modified:  dist/foundation/products variable.txt
Modified:  dist/foundation/templates leftonly leftright
Modified:  dist/foundation/templates/components affiliate_receptor best
Modified:           cart cart_display cart_tiny category_horizontal
Modified:           category_vertical cross fortune none promo random
Modified:           saved_carts_list_small search_box_small
Modified:           search_box_small_top upsell
Modified:  dist/lib/UI icmenu.txt
Modified:  dist/lib/UI/pages/admin test_code.html
Modified:  dist/lib/UI/vars UI_STD_HEAD
Modified:  scripts  interchange.PL
Added:     code/SystemTag tmp_no.coretag
Added:     code/UI_Tag auto_wizard.coretag content_info.coretag
Added:              content_modify.coretag
Added:     dist/lib/UI ContentEditor.pm
Added:     dist/lib/UI/pages/admin auto_wizard.html content.html
Added:              content_editor.html content_preview.html
Added:              content_publish.html
Added:     dist/lib/UI/pages/include component_editor page_editor
Added:              template_editor
Removed:   dist/lib/UI/pages/admin page.html page_edit.html
Removed:            page_new.html page_preview.html page_save.html
Removed:            template.html template_edit.html template_new.html
Removed:            template_preview.html template_save.html
Removed:   dist/lib/UI/pages/include page_edit page_edit_old page_save
Removed:            page_save_old
Log:
	* Major changes to the content editing scheme. I finally think it
	  is really usable.

	* Requires a CSS/Javascript 1.3 compliant browser. Tested on Mozilla 0.9.8,
	  MSIE 5.51, Opera 6.0tp2. All work pretty well; Mozilla is a bit slow,
	  Opera doesn't have CSS widths down.

	* Page editor has a quasi-visual layout that should be much more
	  intuitive. Support for a "PAGE_PICTURE" file in the templates
	  allows visual links to the editor page.

	* Components, templates, and pages are now all editable. Template
	  and component editors need to be brought up to speed with the
	  page editor, but work fairly well.

	* Publishing scripting not yet done.

	* Added new lib/UI/ContentEditor.pm module which implements
	  this stuff in conjunction with lib/UI/pages/include/*_editor.
	  A bit of a JavaScript dependency nightmare on the generated
	  attribute editors, but I make get this more canned as time
	  goes on.

	* Lets get this on record -- this content editiing WILL NOT UNDER
	  ANY CIRCUMSTANCES EVER WORK ON NETSCAPE 4. Do not ask, though I
	  know the people who monitor this stuff won't.

	* Added new "auto_wizard" which builds a wizard from a file
	  like in the example. I think this is pretty cool, if I do
	  say so myself. It will be the method to provide scripted
	  content addition.

	* More table-editor updates -- added notable option, and
	  all_opts option which allows building the options in
	  Perl and then doing:

	  		[table-editor all-opts=`\%opts`]

	* Look for major updates on the table editor to make it
	  completely templateable.

	* That's all the comments for now -- try it out!

Revision  Changes    Path
2.32      +16 -15    interchange/MANIFEST


rev 2.32, prev_rev 2.31
Index: MANIFEST
===================================================================
RCS file: /anon_cvs/repository/interchange/MANIFEST,v
retrieving revision 2.31
retrieving revision 2.32
diff -u -r2.31 -r2.32
--- MANIFEST	5 Feb 2002 05:43:47 -0000	2.31
+++ MANIFEST	16 Feb 2002 09:39:08 -0000	2.32
@@ -88,6 +88,7 @@
 code/SystemTag/time.coretag
 code/SystemTag/timed_build.coretag
 code/SystemTag/tmp.coretag
+code/SystemTag/tmp_no.coretag
 code/SystemTag/total_cost.coretag
 code/SystemTag/tree.coretag
 code/SystemTag/try.coretag
@@ -97,13 +98,16 @@
 code/SystemTag/value_extended.coretag
 code/SystemTag/warnings.coretag
 code/UI_Tag/add_gpg_key.coretag
+code/UI_Tag/auto_wizard.coretag
 code/UI_Tag/available_ups_internal.coretag
 code/UI_Tag/available_www_shipping.coretag
 code/UI_Tag/backup_database.coretag
 code/UI_Tag/backup_file.coretag
 code/UI_Tag/base_url.coretag
 code/UI_Tag/check_upload.coretag
-code/UI_Tag/component_editor.coretag
+code/UI_Tag/content_editor.coretag
+code/UI_Tag/content_info.coretag
+code/UI_Tag/content_modify.coretag
 code/UI_Tag/cp.coretag
 code/UI_Tag/crypt.coretag
 code/UI_Tag/db_columns.coretag
@@ -150,6 +154,7 @@
 code/UI_Tag/rotate_table.coretag
 code/UI_Tag/row_edit.coretag
 code/UI_Tag/run_profile.coretag
+code/UI_Tag/su.coretag
 code/UI_Tag/substitute_file.coretag
 code/UI_Tag/table_editor.coretag
 code/UI_Tag/uneval.coretag
@@ -651,6 +656,7 @@
 dist/foundation/upload/products.xls
 dist/foundation/upload/sampledata.xls
 dist/interchange.cfg.dist
+dist/lib/UI/ContentEditor.pm
 dist/lib/UI/Primitive.pm
 dist/lib/UI/ichelp.txt
 dist/lib/UI/icmenu.txt
@@ -670,10 +676,15 @@
 dist/lib/UI/pages/admin/add_meta_option.html
 dist/lib/UI/pages/admin/advanced.html
 dist/lib/UI/pages/admin/affiliates.html
+dist/lib/UI/pages/admin/auto_wizard.html
 dist/lib/UI/pages/admin/bug_report.html
 dist/lib/UI/pages/admin/build_related.html
 dist/lib/UI/pages/admin/button_builder.html
 dist/lib/UI/pages/admin/compedit.html
+dist/lib/UI/pages/admin/content.html
+dist/lib/UI/pages/admin/content_editor.html
+dist/lib/UI/pages/admin/content_preview.html
+dist/lib/UI/pages/admin/content_publish.html
 dist/lib/UI/pages/admin/customer.html
 dist/lib/UI/pages/admin/customer_all.html
 dist/lib/UI/pages/admin/customer_bill.html
@@ -735,11 +746,6 @@
 dist/lib/UI/pages/admin/order_status.html
 dist/lib/UI/pages/admin/order_view.html
 dist/lib/UI/pages/admin/orderstats.html
-dist/lib/UI/pages/admin/page.html
-dist/lib/UI/pages/admin/page_edit.html
-dist/lib/UI/pages/admin/page_new.html
-dist/lib/UI/pages/admin/page_preview.html
-dist/lib/UI/pages/admin/page_save.html
 dist/lib/UI/pages/admin/payment.html
 dist/lib/UI/pages/admin/preferences.html
 dist/lib/UI/pages/admin/quicklinks.html
@@ -775,11 +781,7 @@
 dist/lib/UI/pages/admin/tablereport.html
 dist/lib/UI/pages/admin/tax.html
 dist/lib/UI/pages/admin/tax_simple.html
-dist/lib/UI/pages/admin/template.html
-dist/lib/UI/pages/admin/template_edit.html
-dist/lib/UI/pages/admin/template_new.html
-dist/lib/UI/pages/admin/template_preview.html
-dist/lib/UI/pages/admin/template_save.html
+dist/lib/UI/pages/admin/test_code.html
 dist/lib/UI/pages/admin/trafficstats.html
 dist/lib/UI/pages/admin/upload_config.html
 dist/lib/UI/pages/admin/upload_file.html
@@ -822,15 +824,14 @@
 dist/lib/UI/pages/admin/wizard/step_style.html
 dist/lib/UI/pages/admin/wizard/step_style_logo.html
 dist/lib/UI/pages/admin/wizard/step_tax.html
+dist/lib/UI/pages/include/component_editor
 dist/lib/UI/pages/include/item_option_matrix
 dist/lib/UI/pages/include/item_option_modular
 dist/lib/UI/pages/include/item_option_simple
 dist/lib/UI/pages/include/order_delete_archive
-dist/lib/UI/pages/include/page_edit
-dist/lib/UI/pages/include/page_edit_old
-dist/lib/UI/pages/include/page_save
-dist/lib/UI/pages/include/page_save_old
+dist/lib/UI/pages/include/page_editor
 dist/lib/UI/pages/include/table_populator
+dist/lib/UI/pages/include/template_editor
 dist/lib/UI/pages/include/wizard_checklist
 dist/lib/UI/pages/include/wizard_profiles
 dist/lib/UI/profiles/Cancel



1.2       +9 -1      interchange/code/SystemTag/attr_list.coretag


rev 1.2, prev_rev 1.1
Index: attr_list.coretag
===================================================================
RCS file: /anon_cvs/repository/interchange/code/SystemTag/attr_list.coretag,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- attr_list.coretag	29 Jan 2002 05:52:38 -0000	1.1
+++ attr_list.coretag	16 Feb 2002 09:39:08 -0000	1.2
@@ -1,4 +1,12 @@
 UserTag attr-list           Order        hash
 UserTag attr-list           hasEndTag
 UserTag attr-list           PosNumber    1
-UserTag attr-list           MapRoutine   Vend::Interpolate::tag_attr_list
+UserTag attr-list           Routine      <<EOR
+sub {
+	my ($opt, $body) = @_;
+	if( ref $opt->{hash} ) {
+		$opt = $opt->{hash};
+	}
+	return Vend::Interpolate::tag_attr_list($body, $opt);
+}
+EOR



1.2       +1 -1      interchange/code/SystemTag/warnings.coretag


rev 1.2, prev_rev 1.1
Index: warnings.coretag
===================================================================
RCS file: /anon_cvs/repository/interchange/code/SystemTag/warnings.coretag,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- warnings.coretag	29 Jan 2002 05:52:38 -0000	1.1
+++ warnings.coretag	16 Feb 2002 09:39:08 -0000	1.2
@@ -18,7 +18,7 @@
 	if(! length($opt->{joiner})) {
 		$opt->{joiner} = $opt->{auto} ? '<li>' : "\n";
 	}
-	$out .= join $opt->{joiner}, @{$Vend::Session->{warnings}};
+	$out .= join $opt->{joiner}, grep /\S/, @{$Vend::Session->{warnings}};
 	$out .= '</ul>' if $opt->{auto};
 	$out .= $opt->{footer} if length($opt->{footer});
 	delete $Vend::Session->{warnings} unless $opt->{keep};



1.1                  interchange/code/SystemTag/tmp_no.coretag


rev 1.1, prev_rev 1.0
Index: tmp_no.coretag
===================================================================
UserTag tmp-no              Order        name
UserTag tmp-no              hasEndTag
UserTag tmp-no              InvalidateCache
UserTag tmp-no              PosNumber    1
UserTag tmp-no              MapRoutine   Vend::Interpolate::set_tmp



1.2       +3 -3      interchange/code/UI_Tag/content_editor.coretag


rev 1.2, prev_rev 1.1
Index: content_editor.coretag
===================================================================
RCS file: /anon_cvs/repository/interchange/code/UI_Tag/content_editor.coretag,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- content_editor.coretag	8 Feb 2002 05:26:01 -0000	1.1
+++ content_editor.coretag	16 Feb 2002 09:39:08 -0000	1.2
@@ -1,10 +1,10 @@
-UserTag content-editor Order item
+UserTag content-editor Order name
 UserTag content-editor addAttr
 UserTag content-editor hasEndTag
 UserTag content-editor noReparse 1
 UserTag content-editor Routine <<EOR
-use UI::ComponentEditor;
+use UI::ContentEditor;
 sub {
-	return UI::ComponentEditor::editor(@_);
+	return UI::ContentEditor::editor(@_);
 }
 EOR



1.5       +4 -4      interchange/code/UI_Tag/display.coretag


rev 1.5, prev_rev 1.4
Index: display.coretag
===================================================================
RCS file: /anon_cvs/repository/interchange/code/UI_Tag/display.coretag,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- display.coretag	8 Feb 2002 23:08:20 -0000	1.4
+++ display.coretag	16 Feb 2002 09:39:08 -0000	1.5
@@ -17,7 +17,7 @@
 	my $template = $opt->{type} eq 'hidden' ? '' : $opt->{template};
 
 	if($opt->{override}) {
-		$opt->{value} = defined $opt->{default} ? $opt->{default} : undef;
+		$opt->{value} = defined $opt->{default} ? $opt->{default} : '';
 	}
 
 	if(! defined $opt->{value} and $table and $column and length($key)) {
@@ -28,7 +28,7 @@
 	my $record;
 
 	my $no_meta = $CGI::values{ui_no_meta_display};
-#::logDebug("no_meta=$no_meta");
+
 	METALOOK: {
 		## No meta display wanted
 		last METALOOK if $no_meta;
@@ -119,7 +119,7 @@
 								type
 								width
 								/;
-			for(keys %$record) {
+			for(@override) {
 				delete $record->{$_} if ! length($record->{$_});
 				next unless defined $opt->{$_};
 				$record->{$_} = $opt->{$_};
@@ -204,7 +204,7 @@
 		my %things = (
 			attribute	=> $column,
 			cols	 	=> $opt->{cols}   || $record->{width},
-			field	 	=> $column,
+			column	 	=> $column,
 			passed	 	=> $record->{options},
 			rows 		=> $opt->{rows}	|| $record->{height},
 			table		=> $table,



1.3       +20 -9     interchange/code/UI_Tag/file_navigator.coretag


rev 1.3, prev_rev 1.2
Index: file_navigator.coretag
===================================================================
RCS file: /anon_cvs/repository/interchange/code/UI_Tag/file_navigator.coretag,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- file_navigator.coretag	4 Feb 2002 01:31:17 -0000	1.2
+++ file_navigator.coretag	16 Feb 2002 09:39:08 -0000	1.3
@@ -22,19 +22,25 @@
 	my $base_admin = ( $::Variable->{UI_BASE} || 'admin');
 	my $base_url = $Vend::Cfg->{VendURL}
 				. '/'
-				. $base_admin;
+				. ($opt->{base_url} || $base_admin);
+	my $view_href = $opt->{view_href} || "$base_admin/do_view";
+	my $view_form = $opt->{view_form} || 'mv_arg=~FN~';
 	my $full_path;
 	my $action = $CGI::values{action} || '';
 	my $already_found;
 
-	my $edit_page = $opt->{edit_page} || 'page_edit';
+	my $edit_page = $opt->{edit_page} || "page_edit";
 	my $edit_var = $opt->{edit_var} || 'ui_page';
+	my $edit_form = $opt->{edit_form} || "$edit_var=~FN~";
 	
 	my @errors;
 	my @messages;
 
-	$Vend::Session->{ui_cwd} = $opt->{initial_dir}
-		if $opt->{initial_dir};
+	my $idir_re;
+	if ($opt->{initial_dir}) {
+		$Vend::Session->{ui_cwd} = $opt->{initial_dir};
+		$idir_re = qr{^$opt->{initial_dir}/};
+	}
 
 	if($action eq 'chdir') {
 		my $newdir = $CGI::values{dir} || '.';
@@ -183,7 +189,7 @@
 		};
 
 	my $ftmpl = <<EOF;
-<A HREF="$Vend::Cfg->{VendURL}/ui_download/~FN~?~ID~">$dn_img</A>$del_string<A HREF="$base_url/upload_file?~ID~&mv_arg=~FN~&ui_return_to=$this_page">$up_img</A><A HREF="$base_url/do_view?~ID~&mv_arg=~FN~">$vw_img</A>&nbsp;%s&nbsp;<A HREF="$base_url/do_view?~ID~&mv_arg=~FN~">%s</A><BR>
+<A HREF="$Vend::Cfg->{VendURL}/ui_download/~FN~?~ID~">$dn_img</A>$del_string<A HREF="$base_url/upload_file?~ID~&mv_arg=~FN~&ui_return_to=$this_page">$up_img</A><A HREF="$base_url/do_view?~ID~&mv_arg=~FN~">$vw_img</A>&nbsp;%s&nbsp;<A HREF="$Vend::Cfg->{VendURL}/$view_href?~ID~&$view_form">%s</A><BR>
 EOF
 
 	my $utmpl = <<EOF;
@@ -193,12 +199,12 @@
 	my $ftmpl_ed;
 	if(! $do_perms and $opt->{edit_only}) {
 		$ftmpl_ed = <<EOF;
-<A HREF="$base_url/$edit_page?~ID~&$edit_var=~FN~&ui_return_to=$this_page">$ed_img</A>&nbsp;%s&nbsp;<A HREF="$base_url/$edit_page?~ID~&$edit_var=~FN~&ui_return_to=$this_page">%s</A><BR>
+<A HREF="$base_url/$edit_page?~ID~&$edit_form&ui_return_to=$this_page">$ed_img</A>&nbsp;%s&nbsp;<A HREF="$base_url/$edit_page?~ID~&$edit_form&ui_return_to=$this_page">%s</A><BR>
 EOF
 	}
 	else {
 		$ftmpl_ed = <<EOF;
-<A HREF="$Vend::Cfg->{VendURL}/ui_download/~FN~?~ID~">$dn_img</A>$del_string<A HREF="$base_url/upload_file?~ID~&mv_arg=~FN~&ui_return_to=$this_page">$up_img</A><A HREF="$base_url/$edit_page?~ID~&$edit_var=~FN~&ui_return_to=$this_page">$ed_img</A>&nbsp;%s&nbsp;<A HREF="$base_url/$edit_page?~ID~&$edit_var=~FN~&ui_return_to=$this_page">%s</A><BR>
+<A HREF="$Vend::Cfg->{VendURL}/ui_download/~FN~?~ID~">$dn_img</A>$del_string<A HREF="$base_url/upload_file?~ID~&mv_arg=~FN~&ui_return_to=$this_page">$up_img</A><A HREF="$base_url/$edit_page?~ID~&$edit_form&ui_return_to=$this_page">$ed_img</A>&nbsp;%s&nbsp;<A HREF="$base_url/$edit_page?~ID~&$edit_form&ui_return_to=$this_page">%s</A><BR>
 EOF
 	}
 
@@ -274,7 +280,9 @@
 			push @dir, [$fe, $fn, $dtmpl, $perms];
 		}
 		elsif ($opt->{edit_all} || /\.html?$/) {
-			push @plain, [$fe, $fn, $ftmpl_ed, $perms];
+			my $rn = '';
+			($rn = $fn) =~ s/$idir_re// if $idir_re;
+			push @plain, [$fe, $fn, $ftmpl_ed, $perms, $rn];
 		}
 		else {
 			push @plain, [$fe, $fn, $ftmpl, $perms];
@@ -291,6 +299,7 @@
 		unshift @dir, [ $nd, $msg, $dtmpl ];
 	}
 
+	my $pc = \$Vend::Session->{pageCount};
 	unshift @dir, [ "$curdir/", errmsg('(new file)'), $utmpl ];
 
 	@dir = () if $opt->{no_dirs};
@@ -302,9 +311,11 @@
 		$out .= "<span class=cmessage>$_</span><br>";
 	}
 	for (@dir, @plain) {
+		$$pc++;
 		$_->[2] = sprintf($_->[2], $_->[3], $_->[1]);
 		$_->[2] =~ s/~FN~/$_->[0]/g;
-		$_->[2] =~ s/~ID~/mv_session_id=$Session->{id}/g;
+		$_->[2] =~ s/~RN~/$_->[4]/g;
+		$_->[2] =~ s/~ID~/mv_session_id=$Session->{id}&mv_pc=$$pc/g;
 		$out .= $_->[2];
 	}
 



1.3       +3 -3      interchange/code/UI_Tag/su.coretag


rev 1.3, prev_rev 1.2
Index: su.coretag
===================================================================
RCS file: /anon_cvs/repository/interchange/code/UI_Tag/su.coretag,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- su.coretag	6 Feb 2002 01:50:32 -0000	1.2
+++ su.coretag	16 Feb 2002 09:39:08 -0000	1.3
@@ -99,17 +99,17 @@
 	elsif ($user) {
 		if( $u->{admin} and ! $super) {
 		}
-::logDebug("user table=$table ufield=$ufield");
+#::logDebug("user table=$table ufield=$ufield");
 		$table  ||= 'userdb';
 		$ufield ||= 'username';
-::logDebug("user table=$table ufield=$ufield");
+#::logDebug("user table=$table ufield=$ufield");
 		if(! $Tag->data($table, $ufield, $user) ) {
 			$Scratch->{ui_error} = errmsg("attempt to su to non-existent user %s", $user);
 			return undef;
 		}
 		my $rand	= random_string();
 		my $sess	= uneval_it($Session);
-::logDebug("sess is $sess");
+#::logDebug("sess is $sess");
 		my $sesskey	= generate_key($rand . $sess);
 
 		open(MDIT, "> $dir/$Session->{id}")



1.3       +123 -53   interchange/code/UI_Tag/table_editor.coretag


rev 1.3, prev_rev 1.2
Index: table_editor.coretag
===================================================================
RCS file: /anon_cvs/repository/interchange/code/UI_Tag/table_editor.coretag,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- table_editor.coretag	8 Feb 2002 23:08:20 -0000	1.2
+++ table_editor.coretag	16 Feb 2002 09:39:08 -0000	1.3
@@ -120,10 +120,19 @@
 UserTag table-editor Routine <<EOR
 sub {
 	my ($table, $key, $opt, $template) = @_;
+show_times("begin table editor call item_id=$key") if $Global::ShowTimes;
 
 	package Vend::Interpolate;
 	use vars qw/$Values $Scratch $Db $Tag $Config $CGI $Variable $safe_safe/;
 
+	if(ref($opt->{all_opts}) eq 'HASH') {
+		my $o = $opt->{all_opts};
+		for (keys %$o ) {
+			$opt->{$_} = $o->{$_};
+		}
+	}
+#Debug("options now=" . ::uneval($opt));
+
 	init_calc() if ! $Vend::Calc_initialized;
 
 	my @messages;
@@ -148,26 +157,22 @@
 					append
 					prepend
 					lookup
+					lookup_query
 					field
 					pre_filter  
 					widget      
 					width       
+					meta       
 				/ )
 		{
-#::logDebug("doing te_hash $_");
 			next if ref $opt->{$_};
-#::logDebug("te_hash $_ not a ref");
 			($opt->{$_} = {}, next) if ! $opt->{$_};
-#::logDebug("te_hash $_ has a value");
 			my $ref = {};
 			my $string = $opt->{$_};
-#::logDebug("te_hash $_ = $string");
 			$string =~ s/^\s+//gm;
 			$string =~ s/\s+$//gm;
-#::logDebug("te_hash $_ now = $string");
 			while($string =~ m/^(.+?)=\s*(.+)/mg) {
 				$ref->{$1} = $2;
-#::logDebug("te_hash $1 = $2");
 			}
 			$opt->{$_} = $ref;
 		}
@@ -212,10 +217,12 @@
 	my $prepend     = $opt->{prepend};
 	my $append      = $opt->{append};
 	my $lookup      = $opt->{lookup};
+	my $lookup_query = $opt->{lookup_query};
 	my $database    = $opt->{database};
 	my $field       = $opt->{field};
 	my $widget      = $opt->{widget};
 	my $width       = $opt->{width};
+	my $pmeta       = $opt->{meta};
 #::logDebug("widget=" . ::uneval_it($widget) );
 #::logDebug("label=" . ::uneval_it($label) );
 
@@ -300,7 +307,7 @@
 	$Scratch->{$opt->{cancel_text}} = $ctext if $ctext;
 	$Scratch->{$opt->{back_text}}   = $btext if $btext;
 
-	if($opt->{wizard} and ! $table) {
+	if($opt->{wizard} || $opt->{notable} and ! $table) {
 		$table = 'mv_null';
 		$Vend::Database{mv_null} = 
 			bless [
@@ -401,7 +408,8 @@
 	my $error_show_var = 1;
 	my $have_errors;
 	if($opt->{ui_profile} or $check) {
-		$Tag->error( { all => 1 } ) if ! $CGI->{mv_form_profile};
+		$Tag->error( { all => 1 } )
+			unless $CGI->{mv_form_profile} or $opt->{keep_errors};
 		my $prof = $opt->{ui_profile} || '';
 		if ($prof =~ s/^\*//) {
 			# special notation ui_profile="*whatever" means
@@ -505,14 +513,26 @@
 		return undef;
 	};
 
-	my $db = Vend::Data::database_exists_ref($table)
+	my $db;
+	unless($opt->{notable}) {
+		$db = Vend::Data::database_exists_ref($table)
 		or return $die->('table-editor: bad table %s', $table);
+	}
 
 	if($opt->{ui_wizard_fields}) {
 		$opt->{ui_data_fields} = $opt->{ui_display_only} = $opt->{ui_wizard_fields};
 	}
 
-	my $keycol = $db->config('KEY');
+	my $keycol;
+	if($opt->{notable}) {
+		$keycol = $opt->{ui_data_key_name};
+	}
+	else {
+		$keycol = $opt->{ui_data_key_name} || $db->config('KEY');
+	}
+
+	$opt->{form_extra} =~ s/^\s*/ /
+		if $opt->{form_extra};
 
 	$opt->{form_name} = qq{ NAME="$opt->{form_name}"}
 		if $opt->{form_name};
@@ -544,8 +564,17 @@
 #::logDebug("break_before_label=$opt->{ui_break_before_label}");
 	}
 
-	$opt->{ui_data_fields} = $opt->{mv_data_fields} || (join " ", $db->columns())
-		if ! $opt->{ui_data_fields};
+	$opt->{ui_data_fields} ||= $opt->{mv_data_fields};
+
+	if(! $opt->{ui_data_fields}) {
+		if( $opt->{notable}) {
+			::logError("table_editor: no place to get fields!");
+			return '';
+		}
+		else {
+			$opt->{ui_data_fields} = join " ", $db->columns();
+		}
+	}
 
 	$opt->{ui_data_fields} =~ s/[,\0\s]+/ /g;
 	###############################################################
@@ -564,7 +593,7 @@
 	my $url = $Tag->area('ui');
 
 	my $key_message;
-	if($opt->{ui_new_item}) {
+	if($opt->{ui_new_item} and ! $opt->{notable}) {
 		if( ! $db->config('_Auto_number') ) {
 			$db->config('AUTO_NUMBER', '000001');
 			$key = $db->autonumber($key);
@@ -579,7 +608,10 @@
 	my $data;
 	my $exists;
 
-	if($opt->{ui_clone_id} and $db->record_exists($opt->{ui_clone_id})) {
+	if($opt->{notable}) {
+		$data = {};
+	}
+	elsif($opt->{ui_clone_id} and $db->record_exists($opt->{ui_clone_id})) {
 		$data = $db->row_hash($opt->{ui_clone_id})
 			or
 			return $die->('table-editor: row_hash function failed for %s.', $key);
@@ -808,7 +840,7 @@
 	my @out;
 	push @out, '[restrict]' if $opt->{reparse};
 	push @out, <<EOF unless $wo;
-<FORM METHOD=$opt->{method} ACTION="$opt->{href}"$opt->{form_name}$opt->{enctype}>
+<FORM METHOD=$opt->{method} ACTION="$opt->{href}"$opt->{form_name}$opt->{enctype}$opt->{form_extra}>
 $sidstr<INPUT TYPE=hidden NAME=mv_todo VALUE="$action">
 <INPUT TYPE=hidden NAME=mv_click VALUE="process_filter">
 <INPUT TYPE=hidden NAME=mv_nextpage VALUE="$opt->{mv_nextpage}">
@@ -898,18 +930,18 @@
 	  					|| $linecount > 4
 						|| defined $opt->{include_form}
 						|| $mlabel;
-      if ($extra_ok and ! $opt->{no_top} and ! $opt->{nosave}) {
+	if ($extra_ok and ! $wo and ! $opt->{no_top} and ! $opt->{nosave}) {
 	  	if($opt->{back_text}) {
 		  push @out, <<EOF unless $wo;
 <TR class=rnorm>
 <td>&nbsp;</td>
 <td align=left colspan=$oddspan class=cdata>
 EOF
-			push @out, <<EOF if not $wo || $opt->{bottom_buttons};
+			push @out, <<EOF if ! $opt->{bottom_buttons};
 <INPUT TYPE=submit NAME=mv_click VALUE="$opt->{back_text}">&nbsp;<INPUT TYPE=submit NAME=mv_click VALUE="$opt->{cancel_text}">&nbsp;<B><INPUT TYPE=submit NAME=mv_click VALUE="$opt->{next_text}"></B>
 <BR>
 EOF
-			push @out, <<EOF unless $wo;
+			push @out, <<EOF;
 $mlabel
 </TD>
 </TR>
@@ -920,16 +952,16 @@
 EOF
 		}
 		elsif ($opt->{wizard}) {
-		  push @out, <<EOF unless $wo;
+		  push @out, <<EOF;
 <TR class=rnorm>
 <td>&nbsp;</td>
 <td align=left colspan=$oddspan class=cdata>
 EOF
-			push @out, <<EOF if (! $wo and ! $opt->{bottom_buttons});
+			push @out, <<EOF if ! $opt->{bottom_buttons};
 <INPUT TYPE=submit NAME=mv_click VALUE="$opt->{cancel_text}">&nbsp;<B><INPUT TYPE=submit NAME=mv_click VALUE="$opt->{next_text}"></B>
 <BR>
 EOF
-			push @out, <<EOF unless $wo;
+			push @out, <<EOF;
 $mlabel
 </TD>
 </TR>
@@ -940,14 +972,25 @@
 EOF
 		}
 		else {
-		  push @out, <<EOF unless $wo;
+		  push @out, <<EOF;
 <TR class=rnorm>
 <td>&nbsp;</td>
 <td align=left colspan=$oddspan class=cdata>
 <B><INPUT TYPE=submit NAME=mv_click VALUE="$opt->{next_text}">
 </B>
+EOF
+			push @out, <<EOF unless $opt->{nocancel};
 &nbsp;
 <INPUT TYPE=submit NAME=mv_click VALUE="$opt->{cancel_text}">$mlabel
+EOF
+
+			push @out, <<EOF if $opt->{show_reset};
+&nbsp;
+<INPUT TYPE=reset>
+EOF
+
+			push @out, <<EOF;
+$mlabel
 </TD>
 </TR>
 
@@ -1078,21 +1121,29 @@
 			}
 		}
 	}
-	if(!$db) {
+	if(!$db and ! $opt->{notable}) {
 		return "<TR><TD>Broken table '$table'</TD></TR>";
 	}
 
 	my $passed_fields = $opt->{ui_data_fields};
 
+#::logDebug("extra=" . ::uneval($extra));
 	my @extra_cols;
 	my %email_cols;
 	my %ok_col;
+	my @cols;
+	my @dbcols;
+	my %display_only;
+
+	if($opt->{notable}) {
+		@cols = split /[\s,\0]+/, $passed_fields;
+	}
+	else {
 
 	while($passed_fields =~ s/(\w+[.:]+\S+)//) {
 		push @extra_cols, $1;
 	}
 
-	my %display_only;
 	my @do = grep /\S/, split /[\0,\s]+/, $opt->{ui_display_only};
 	for(@do) {
 		$email_cols{$_} = 1 if $opt->{mailto};
@@ -1100,8 +1151,7 @@
 		push @extra_cols, $_;
 	}
 
-	my @cols;
-	my (@dbcols)  = split /\s+/, $Tag->db_columns( {
+		@dbcols  = split /\s+/, $Tag->db_columns( {
 										name	=> $table,
 										columns	=> $passed_fields,
 										passed_order => 1,
@@ -1127,18 +1177,22 @@
 			$ok_col{$_} = 1;
 		}
 	}
-
 	@cols = grep $ok_col{$_}, split /\s+/, $opt->{ui_data_fields};
+	}
+
+	$keycol = $cols[0] if ! $keycol;
 
 	if($opt->{defaults}) {
-		for(@cols) {
 			if($opt->{force_defaults}) {
-				$default->{$_} = $override->{$_} = $def->{$_};
+			$default->{$_} = $def->{$_} for @cols;
 			}
 			elsif($opt->{wizard}) {
+			for(@cols) {
 				$default->{$_} = $def->{$_} if defined $def->{$_};
 			}
+		}
 			else {
+			for(@cols) {
 				next if defined $default->{$_};
 				next unless defined $def->{$_};
 				$default->{$_} = $def->{$_};
@@ -1176,6 +1230,26 @@
 
 	my @controls;
 
+	if(my $jsc = $opt->{js_changed}) {
+		$jsc =~ /^\w+$/
+			and $jsc = qq{onChange="$jsc} . q{('$$KEY$$','$$COL$$');"};
+		foreach my $c (@cols) {
+			next if $extra->{$c} =~ /\bonchange\s*=/i;
+			my $tpl = $jsc;
+			$tpl .= $extra->{$c} if length $extra->{$c};
+			$tpl =~ s/\$\$KEY\$\$/$key/g;
+			$tpl =~ s/\$\$COL\$\$/$c/g;
+			if ($extra->{$c} and $extra->{$c} =~ /\bonchange\s*=/i) {
+				$tpl =~ s/onChange="//;
+				$tpl =~ s/"\s*$/;/;
+				$extra->{$c} =~ s/\b(onchange\s*=\s*["'])/$1$tpl/i;
+			}
+			else {
+				$extra->{$c} = $tpl;
+			}
+		}
+	}
+
 	foreach my $col (@cols) {
 		my $t;
 		my $c;
@@ -1224,7 +1298,7 @@
 		my $overridden;
 
 		$currval = $data->{$col} if defined $data->{$col};
-		if (defined $override->{$c} ) {
+		if ($opt->{force_defaults} or defined $override->{$c} ) {
 			$currval = $override->{$c};
 			$overridden = 1;
 #::logDebug("hit override for $col,currval=$currval");
@@ -1315,7 +1389,7 @@
 			$template =~ s/\$LABEL\$/$Tag->error($parm)/eg;
 		}
 		$template =~ s/~TKEY~/$tkey_message || ''/eg;
-#::logDebug("col=$c widget=$widget->{$c} label=$label->{$c} (type=$type)");
+#::logDebug("col=$c currval=$currval widget=$widget->{$c} label=$label->{$c} (type=$type)");
 		my $display = $Tag->display({
 										applylocale => 1,
 										arbitrary => $opt->{ui_meta_view},
@@ -1330,6 +1404,7 @@
 										help_url => $help_url->{$c},
 										label => $label->{$c},
 										key => $key,
+										meta => $pmeta->{$c},
 										name => $namecol,
 										override => $overridden,
 										passed => $passed->{$c},
@@ -1338,6 +1413,7 @@
 										append => $append->{$c},
 										prepend => $prepend->{$c},
 										lookup => $lookup->{$c},
+										lookup_query => $lookup_query->{$c},
 										db => $database->{$c},
 										pre_filter => $pre_filter->{$c},
 										table => $t,
@@ -1345,6 +1421,7 @@
 										width => $width->{$c},
 										template => $template,
 									});
+#::logDebug("finished display of col=$c");
 		if($super and ! $opt->{no_meta} and ($Variable->{UI_META_LINK} || $def->{ui_meta_force}) ) {
 			$meta .= '<BR><FONT SIZE=1>';
 			# Get global variables
@@ -1461,9 +1538,9 @@
 EOF
 
   SAVEWIDGETS: {
-  	last SAVEWIDGETS if $opt->{nosave}; 
+  	last SAVEWIDGETS if $wo || $opt->{nosave}; 
 	  	if($opt->{back_text}) {
-		  push @out, <<EOF unless $wo;
+		  push @out, <<EOF;
 <TR class=rnorm>
 <td>&nbsp;</td>
 <td align=left colspan=$oddspan class=cdata>
@@ -1471,7 +1548,7 @@
 EOF
 		}
 		elsif($opt->{wizard}) {
-		  push @out, <<EOF unless $wo;
+		  push @out, <<EOF;
 <TR class=rnorm>
 <td>&nbsp;</td>
 <td align=left colspan=$oddspan class=cdata>
@@ -1479,30 +1556,23 @@
 EOF
 		}
 		else {
-		  push @out, <<EOF unless $wo;
-<TR class=rnorm>
+			push @out, qq{<TR class=rnorm>
 <td>&nbsp;</td>
 <td align=left colspan=$oddspan class=cdata>
-<B><INPUT TYPE=submit NAME=mv_click VALUE="$opt->{next_text}"></B>&nbsp;<INPUT TYPE=submit NAME=mv_click VALUE="$opt->{cancel_text}">
-EOF
+<B><INPUT TYPE=submit NAME=mv_click VALUE="$opt->{next_text}"></B>};
+			push @out,
+				qq{&nbsp;<INPUT TYPE=submit NAME=mv_click VALUE="$opt->{cancel_text}">}
+				unless $opt->{nocancel};
+			push @out, qq{&nbsp;<INPUT TYPE=reset>}
+				if $opt->{show_reset};
 		}
-#
-#	$out .= <<EOF;
-#
-#<TR class=rnorm>
-#<td>&nbsp;</td>
-#<td align=left colspan=$oddspan>
-#<B><INPUT TYPE=submit NAME=mv_click VALUE="$opt->{next_text}"></B>
-#&nbsp;
-#&nbsp;
-#<INPUT TYPE=submit NAME=mv_click VALUE=$opt->{cancel_text}>
-#EOF
-	if($Tag->if_mm('tables', "$table=x") and ! $db->config('LARGE') ) {
+
+	if(! $opt->{notable} and $Tag->if_mm('tables', "$table=x") and ! $db->config('LARGE') ) {
 		my $checked = ' CHECKED';
 		$checked = ''
 			if defined $opt->{mv_auto_export} and ! $opt->{mv_auto_export};
 		my $autoexpstr = errmsg('Auto-export');		
-		push @out, <<EOF unless $wo or $opt->{noexport} or $opt->{nosave};
+		push @out, <<EOF unless $opt->{noexport} or $opt->{nosave};
 <small>
 &nbsp;
 &nbsp;
@@ -1529,13 +1599,13 @@
 						$extra
 					!,
 					});
-		push @out, <<EOF if !($wo || $opt->{nosave});
+		push @out, <<EOF if ! $opt->{nosave};
 <BR><BR><A
 onClick="return confirm('Are you sure you want to delete $key?')"
 HREF="$url"><IMG SRC="delete.gif" ALT="Delete $key" BORDER=0></A> Delete
 EOF
 	}
-	push @out, <<EOF unless $wo;
+	push @out, <<EOF;
 </small>
 </td>
 </tr>



1.2       +6 -2      interchange/code/UI_Tag/uneval.coretag


rev 1.2, prev_rev 1.1
Index: uneval.coretag
===================================================================
RCS file: /anon_cvs/repository/interchange/code/UI_Tag/uneval.coretag,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- uneval.coretag	29 Jan 2002 05:52:40 -0000	1.1
+++ uneval.coretag	16 Feb 2002 09:39:08 -0000	1.2
@@ -1,9 +1,13 @@
-UserTag uneval Order ref
+UserTag uneval Order name ref
 UserTag uneval PosNumber 1
 UserTag uneval Routine <<EOR
 sub {
+	my ($name, $ref) = @_;
 #::logError("args: @_" . Vend::Util::uneval_it(@_));
-	return Vend::Util::uneval_it(@_);
+	if(! $ref) {
+		$ref = $Vend::Session->{$name};
+	}
+	return Vend::Util::uneval($ref);
 }
 EOR
 



1.1                  interchange/code/UI_Tag/auto_wizard.coretag


rev 1.1, prev_rev 1.0
Index: auto_wizard.coretag
===================================================================
UserTag  auto-wizard  Order  name
UserTag  auto-wizard  AddAttr
UserTag  auto-wizard  HasEndTag
UserTag  auto-wizard  Routine <<EOR

use vars qw/$Session $Tag $CGI $Tmp $Scratch $Values $ready_safe/;

sub compile_wizard {
	my ($wizname, $opt, $script) = @_;
#Debug("script in: $script");
	$script =~ s/^\s+//;
	$script =~ s/\r\n/\n/g;
	$script =~ s/\r/\n/g;
	my @lines = split /\n/, $script;
	my $ref;

	my @pages;

	my $qip; # question in progress
	my $iip; # item in progress
	my $fip; # final in progress
	my $began; # We have begun

	my $sip;
	my $vip;
	my $mark;

#Debug("Found some lines, number=" . scalar @lines);
	for(@lines) {
		if($mark) {
			$sip .= "$_\n", next
				unless $_ eq $mark;
			$_ = $sip;
			undef $mark;
			undef $sip;
		}

		if (s/<<(\w+)$//) {
			$mark = $1;
			$sip = $_;
			next;
		}

		s/\s+$//;

		if(! $_) {
			undef $iip;
			next;
		}

		if(! $ref) {
			if(/^(\w+):\s*(.*)/) {
				$began = 1;
				$wizname ||= $1;
				my $title = $2;
				$ref = { _page_name => 'begin', _name => [], title => $title };
			}
			next;
		}

		if(/^(\d+):\s*(.*)/) {
			my $pn = $1; my $title = $2;
			push @pages, $ref;
			my $lastpage = $ref->{_page_name};
			$qip = [];
			$ref = { _page_name => $pn, _name => $qip, _page_title => $title};
			next;
		}
		if(/^final:\s*(.*)/) {
			undef $qip;
			undef $iip;
			$fip = 1;
			my $title = $1;
			push @pages, $ref;
			my $lastpage = $ref->{_page_name};
			$ref = { _page_name => 'final', _page_title => $title};
			next;
		}


		if($fip) {
		
			s/^\s+//;
			unless (/^([A-Za-z]\w+)\s*:\s*(.*)/s) {
				$Tag->warnings(qq{Unrecognized "$_" in middle of script.});
				next;
			}
			my $thing = $1;
			my $value = $2;
			$ref->{$thing} = $value;
			next;
		}

		if($qip) {
			if(/^(itl|perl)(?:_condition)?:\s*(.*)$/s) {
				if(! $ref->{_condition}) {
					$ref->{_conditional_type} = $1;
					$ref->{_condition} = $2;
				}
				else {
					$Tag->error(
						"%s_condition: cannot set twice in wizard %s screen %s",
						$1,
						$pages[0]->{_title},
						$ref->{_page_name},
					);
					return;
				}
				next;
			}
			s/^\s+//;
			unless (/^([A-Za-z]\w+)(?:=([^:]+))?\s*:\s*(.*)/s) {
				$Tag->warnings(qq{Unrecognized "$_" in middle of script.});
				next;
			}
			my $thing = $1;
			my $modifier = $2;
			my $value = $3;

			if(! $iip) {
				$iip = $thing;
				push @$qip, $iip;
				$ref->{label}{$iip} = $value;
				next;
			}

			if($modifier) {
				$ref->{_modifier} ||= {};
				$ref->{_modifier}{$thing} ||= {};
				$ref->{_modifier}{$thing}{$iip} = $modifier;
			}
			$ref->{$thing} ||= {};
			$ref->{$thing}{$iip} = $value;
		}
	}
	push @pages, $ref;
	$wizname ||= 'default';
	my $wiz_ary = $Session->{auto_wizard} ||= {};
	$wiz_ary->{$wizname} = \@pages;
#Debug("Wizard $wizname=" . ::uneval(\@pages));
	return $wizname;
}

sub {
	my ($wizname, $opt, $body) = @_;

	return $Tmp->{auto_wizard} if $opt->{show} and ! $opt->{run};

	if($opt->{compile}) {
		my $n;
		$n = compile_wizard(@_)
			or do {
				$Tmp->{auto_wizard} = errmsg(
										"Wizard %s failed to compile.",
										$wizname,
									);
				return;
				};
#Debug("compiler returned wizname=$n");
		$wizname = $n;
		undef $body;
	}

	if(! defined $opt->{run}) {
		$opt->{run} = 1;
		$opt->{show} = 0 if ! defined $opt->{show};
	}

	my $title_var = $opt->{title_scratch}   || 'page_title';
	my $banner_var = $opt->{banner_scratch} || 'page_banner';
	my $wiz;

	return unless $wiz = $Session->{auto_wizard};

	$wizname ||= $CGI->{wizard_name} || 'default';
#Debug("wizname=$wizname");

	return unless $wiz = $wiz->{$wizname};
#Debug("we have a wiz! wizname=$wizname");

	my $beg = $wiz->[0];
	my $fin = $wiz->[-1];

	for($beg, $fin) {
		die "Bad wizard!" unless ref($_) eq 'HASH';
	}

	my $lastwiz = $#$wiz;
	my $lastpage = $CGI->{wizard_page} || 0;
	my $current_page;

	my %opts;
	copyref($beg, \%opts);

	# Get rid of internal stuff
	for(keys %opts) {
		next unless /^_/;
		delete $opts{$_};
	}


	if($CGI->{ui_wizard_action} eq 'Back') {
		$current_page = $lastpage - 1;
	}
	elsif($CGI->{ui_wizard_action} eq 'Cancel') {
		$current_page = 0;
	}
	elsif($CGI->{ui_wizard_action} eq 'Next') {
		$current_page = $lastpage + 1;
	}
	else {
		$current_page = $lastpage;
	}

	my $finished;
	my $condition_done;
	my $optref;
	GETSCREEN: {
		$optref = $wiz->[$current_page];
		if(! $condition_done and $optref->{_condition}) {
			$condition_done = 1;
			my $result;
			if($optref->{_condition_type} eq 'itl') {
				eval {
					$result = interpolate_html($optref->{_condition});
				};
				$result =~ s/\s+$//;
				$result =~ s/.*\s//s;
				$result += 0;
				$current_page += $result;
			}
			else {
				eval {
					$result = $ready_safe->reval($optref->{_condition});
				};
				if($@) {
					$Tag->error(
						"error during perl conditional: $@\ncode was:\n%s",
						$@,
						$optref->{_condition},
					);
					$current_page -= 1;
				}
				$result += 0;
#::logDebug("did perl conditional, result=$result");
				$current_page += $result;
			}
			redo GETSCREEN;
		}

		if($current_page <= 0) {
			$current_page = 1;
		}
		elsif ( ($current_page + 1) == $lastwiz ) {
			$opts{next_text} = errmsg('Finish')
				if $fin->{auto};
		}
		elsif ($current_page >= $lastwiz) {
			$finished = 1;
		}
		$optref = $wiz->[$current_page];
	}
	
	my %attr;

	$attr{TITLE}  = $Scratch->{$title_var}  = $optref->{_page_title};
	$attr{BANNER} = $Scratch->{$banner_var} = $optref->{_page_title};

	if($finished) {
			my $ref = { %$fin };
			my @vals;
			for my $w (@$wiz) {
				next unless ref($w->{_name}) eq 'ARRAY';
				push @vals, @{$w->{_name}};
			}
#Debug("finished, page ref=" . uneval($ref));
			$ref->{href} ||= delete $ref->{page};
			$attr{TITLE} = $Scratch->{$title_var}
				= $ref->{_page_title} || "Finished with $wizname...";
			$attr{PROMPT} = delete $ref->{prompt} || '';
			$attr{ANCHOR} = delete $ref->{anchor} || 'Go';
			$attr{EXTRA} = delete $ref->{extra} || '';
			my $remap = delete $ref->{remap};
			my $template = delete $ref->{template};
			$attr{EXTRA} = " $attr{EXTRA}" if $attr{EXTRA};
			my $auto = delete $ref->{auto};

			for(keys %$ref) {
				next unless /^_/;
				delete $ref->{$_};
			}

			$ref->{form} = 'auto';
			for(@vals) {
				$ref->{$_} = $Values->{$_};
			}

			my $save = {};
			if($remap) {
				my @pairs = split /[\s,\0]+/, $remap;
				for(@pairs) {
					my ($k, $v) = split /=/, $_;
					next unless $k and $v;
					my $val = delete($ref->{$k}) || $save->{$k};
					$save->{$k} = $val;
					$ref->{$v} = $val;
				}
			}

			$attr{URL} = $Tag->area($ref);

			if($auto) {
				$opt->{reparse} = 1;
				return '[bounce href="' . $attr{URL} . '"]';
			}
			$template ||= <<'EOF';
<H1>{TITLE}</h1>
{PROMPT}
<p>
<blockquote>
<A HREF="{URL}"{EXTRA}>{ANCHOR}</A>
</blockquote>
EOF
			$Tmp->{auto_wizard} = $Tag->attr_list( { hash => \%attr }, $template);
			return $Tmp->{auto_wizard} if $opt->{show};
			return;
	}

#Debug("we have a wiz=$wizname! current_page = $current_page");

#Debug("optref=" . $Tag->uneval(undef, $optref));
	my $name = $optref->{_name} || die;
	$Scratch->{page_title} = $optref->{_page_title};


	$opts{all_errors} = '1';
	$opts{hidden} = {
		wizard_name => $wizname,
		wizard_page => $current_page,
	};

	$opts{wizard} = 1;
	$opts{notable} = 1;
	$opts{no_meta} = 1;
	$opts{defaults} = 1;
	$opts{mv_cancelpage} ||= 'admin/index';
	$opts{row_template} = <<'EOF';
{HELP}    <td>&nbsp;</td>
	<td class=cdata>
   <span style="color: blue">$HELP$</span>
   </td>
</tr>
<tr class=rnorm>{/HELP}
   <td class=cdata width="20%"> 
     $BLABEL$$LABEL$$ELABEL$
   </td>
   <td class=cdata> 
     <table cellspacing=0 cellmargin=0 width="100%">
       <tr> 
         <td class=cwidget> 
           $WIDGET$
         </td>
         <td class=chelp>~TKEY~{HELP_URL}<BR><A HREF="$HELP_URL$">more help</A>{/HELP_URL}</td>
       </tr>
     </table>
   </td>
<tr class=rtitle>
	<td colspan=2><img src="bg.gif"></td>
EOF

	$opts{ui_wizard_fields} = join " ", @$name;
	$opts{mv_nextpage} = $Global::Variable->{MV_PAGE};
	$opts{mv_prevpage} = $Global::Variable->{MV_PAGE} if $current_page != 1;
	$opts{bottom_buttons} = 1;

	my %modsub = (
			i		=> sub {
							my $val = shift;
							::logDebug("running interpolate of $val");
							return interpolate_html($val);
						},
			default => sub {
							my $val = shift;
							my $filters = join " ", @_;
							return $Tag->filter($filters, $val);
						},
		);
	my $mod = $optref->{_modifier} || '';
	for(keys %$optref) {
		next if /^_/;
		next unless ref($optref->{$_}) eq 'HASH';
		$opts{$_} ||= {};
		next unless ref($opts{$_}) eq 'HASH';
		Vend::Util::copyref($optref->{$_}, $opts{$_});
		my $m;
		if($mod and $m = $mod->{$_}) {
			my $r = $opts{$_};
			for my $k (keys %$r) {
				next unless $m->{$k};
				my @subs = split /\s*,\s*/, $m->{$k};
				for(@subs) {
					my $sub = $modsub{$_} || $modsub{default};
					$r->{$k} = $sub->($r->{$k}, $_);
				}
			}
		}
	}

	$opts{widget} ||= {};
	if( my $r = delete $opts{type} ) {
		for(keys %$r) {
			$opts{widget}{$_} = $r->{$_};
		}
	}

	delete $opts{type};
	$Tmp->{auto_wizard} = $Tag->table_editor( {all_opts => \%opts });
	if($Tmp->{auto_wizard} !~ /<form\s+/i) {
		$attr{auto_wizard} .= "\n";
		my $msg = errmsg("Auto wizard failed to run wizard %s.", $name);
		$Tmp->{auto_wizard} .= $Tag->error({ show => 1, set => $msg });
	}

	return $Tmp->{auto_wizard} if $opt->{show};
	return;
}
EOR



1.1                  interchange/code/UI_Tag/content_info.coretag


rev 1.1, prev_rev 1.0
Index: content_info.coretag
===================================================================
UserTag content-info Order dir
UserTag content-info addAttr
UserTag content-info Routine <<EOR
use UI::ContentEditor;
sub {
	my ($dir, $opt) = @_;
	$opt->{dir} = $dir if $dir;

	my $delim = $opt->{delimiter} || ',';
	my $type;
	if( $opt->{templates} ) {
		$type = 'templates';
	}
	else {
		$type = 'components';
	}

	my $tpls;
	my $comps;
	my $things;
	my $labels;
	my $classes;

	if($Vend::caCompCache{$type}) {
		$things = $Vend::caCompCache{$type};
		$labels = $Vend::clCompCache{$type};
		$classes = $Vend::ccCompCache{$type};
	}
	else {
		my $o = { dir => $opt->{dir}, $type => 1, available => 1};
		$things = [];
		@$things = UI::ContentEditor::read_template(undef, $o);
		$Vend::caCompCache{$type} = $things;
		$labels = $Vend::clCompCache{$type} = {};
		$classes = $Vend::ccCompCache{$type} = {};
		for(@$things) {
			$Vend::clCompCache->{$_->[0]} = $_->[1];
			$Vend::ccCompCache->{$_->[0]} = $_->[2];
		}
	}

	if($opt->{label}) {
		return $Vend::clCompCache->{$opt->{code}};
	}

	if($opt->{structure}) {
		$opt->{type} = $opt->{ui_type} = 'component';
		return Vend::ContentEditor::read_template($opt->{code}, $opt);
	}

	if ($opt->{show_class}) {
		return $Vend::ccCompCache->{$opt->{code}};
	}

	## Default is to return options

	my @out;
	if(my $class = $opt->{class}) {
		my $re = qr{\b(?:$class|ALL)\b};
		my @comps = grep $_->[2] =~ $re, @$things;
		$things = \@comps;
	}

	for(@$things) {
		$_->[1] =~ s/($delim)/'&#' . ord($1) . ';'/ge;
		push @out, join "=", $_->[0], $_->[1];
	}
	unshift @out, ($opt->{templates} ? "=No template" : "=No component");
	return join $delim, @out;
}
EOR



1.1                  interchange/code/UI_Tag/content_modify.coretag


rev 1.1, prev_rev 1.0
Index: content_modify.coretag
===================================================================
UserTag content-modify Order op name type
UserTag content-modify addAttr
UserTag content-modify Routine <<EOR
use UI::ContentEditor;
sub {
	return UI::ContentEditor::content_modify(@_);
}
EOR



2.7       +22 -19    interchange/dist/foundation/catalog.cfg


rev 2.7, prev_rev 2.6
Index: catalog.cfg
===================================================================
RCS file: /anon_cvs/repository/interchange/dist/foundation/catalog.cfg,v
retrieving revision 2.6
retrieving revision 2.7
diff -u -r2.6 -r2.7
--- catalog.cfg	1 Feb 2002 04:21:46 -0000	2.6
+++ catalog.cfg	16 Feb 2002 09:39:08 -0000	2.7
@@ -192,8 +192,30 @@
 ## Set this if you have a different secure server
 #AlwaysSecure   order ord/checkout ord/basket login change_password process
 
+## Payment-related stuff
+
 EncryptKey  __PGP_KEY__
 
+## These routes are not order routes, but payment routes
+Route  authorizenet  id           "__AUTHNET_ID__"
+Route  authorizenet  secret       "__AUTHNET_SECRET__"
+Route  authorizenet  host         "__AUTHNET_HOST__"
+Route  authorizenet  referer      "__AUTHNET_REFERER__"
+
+Route  cybercash     configfile   "__CYBER_CONFIGFILE__"
+
+Route  itransact     id           "__ITRANSACT_ID__"
+
+Route  signio        id           "__SIGNIO_ID__"
+Route  signio        secret       "__SIGNIO_SECRET__"
+Route  signio        partner      "__SIGNIO_PARTNER__"
+Route  signio        vendor       "__SIGNIO_VENDOR__"
+Route  signio        host         "__SIGNIO_SERVER__"
+
+Route  skipjack      id           "__SKIPJACK_ID__"
+Route  skipjack      partner      "__SKIPJACK_PARTNER__"
+
+
 # This prevents a user from setting this value, you may want to unset
 # this if you have user-selectable handling charges like insurance
 FormIgnore   mv_handling
@@ -282,25 +304,6 @@
 #Route   default   dynamic_routes  1
 ## Uncomment this if you want ITL allowed in routes
 #Route   default   expandable      1
-
-## These routes are not order routes, but payment routes
-Route  authorizenet  id           "__AUTHNET_ID__"
-Route  authorizenet  secret       "__AUTHNET_SECRET__"
-Route  authorizenet  host         "__AUTHNET_HOST__"
-Route  authorizenet  referer      "__AUTHNET_REFERER__"
-
-Route  cybercash     configfile   "__CYBER_CONFIGFILE__"
-
-Route  itransact     id           "__ITRANSACT_ID__"
-
-Route  signio        id           "__SIGNIO_ID__"
-Route  signio        secret       "__SIGNIO_SECRET__"
-Route  signio        partner      "__SIGNIO_PARTNER__"
-Route  signio        vendor       "__SIGNIO_VENDOR__"
-Route  signio        host         "__SIGNIO_SERVER__"
-
-Route  skipjack      id           "__SKIPJACK_ID__"
-Route  skipjack      partner      "__SKIPJACK_PARTNER__"
 
 
 SalesTax        __TAXFIELD__



2.7       +20 -17    interchange/dist/foundation/products/variable.txt


rev 2.7, prev_rev 2.6
Index: variable.txt
===================================================================
RCS file: /anon_cvs/repository/interchange/dist/foundation/products/variable.txt,v
retrieving revision 2.6
retrieving revision 2.7
diff -u -r2.6 -r2.7
--- variable.txt	8 Aug 2001 21:46:14 -0000	2.6
+++ variable.txt	16 Feb 2002 09:39:09 -0000	2.7
@@ -9,17 +9,24 @@
 COMPANY	__MVC_COMPANY__	Company
 CONTRAST	RED	Template
 CREDIT_CARDS_ACCEPTED	__MVC_PAYCC__	Payment
-SHIP_DEFAULT_COUNTRY	US	Shipping
-SHIP_DEFAULT_MODE	upsg	Shipping
 DECREMENT_INVENTORY	1	Order
 DEFAULT_FONT	__MVC_DEFAULTFONT__	Template
 DEFAULT_FONT	__MVC_DEFAULTFONT__	Template
+DICT_PRICE_SALE	__MVC_DICTPRICEALE__	Labels
+DICT_PRICE_STD	__MVC_DICTPRICESTD__	Labels
 DOCROOT	__MVC_DOCUMENTROOT__	Directories and Paths
 EMAIL_INFO	__MVC_EMAILINFO__	Company
 EMAIL_SERVICE	__MVC_EMAILSERVICE__	Company
 ENCRYPTOR		Encryption
 FAX	__MVC_FAX__	Company
 IMAGE_DIR	__MVC_IMAGEURL__	Directories and Paths
+IMG_ADDCART	__MVC_IMGADDCART__	Images
+IMG_CHECKOUT	__MVC_IMGCHECKOUT__	Images
+IMG_CONTINUE	__MVC_IMGCONTINUE__	Images
+IMG_MOREINFO	__MVC_IMGMOREINFO__	Images
+IMG_PLACEORDER	__MVC_IMGPLACEORDER__	Images
+IMG_RECALC	__MVC_IMGRECALC__	Images
+IMG_VIEWCART	__MVC_IMGVIEWCART__	Images
 LOGGED_STATIC	1	Static pages
 LOGO	__MVC_LOGO__	Template
 MV_DEFAULT_SEARCH_DB	1	Database
@@ -27,48 +34,44 @@
 MV_OPTION_TABLE	options	Item display
 MYSQL	__MVC_MYSQL__	Database
 ORACLE	__MVC_ORACLE__	Database
-ORDER_ROUTES	log main copy_user	Order
 ORDERS_TO	__MVC_MAILORDERTO__	Order
-PGSQL	__MVC_PGSQL__	Database
+ORDER_ROUTES	log main copy_user	Order
 PGP_KEY		Encryption
+PGSQL	__MVC_PGSQL__	Database
 PHONE	__MVC_PHONE__	Company
-PO_ACCEPTED	__MVC_PAYPO__	Payment
 POSTAL_ACCEPTED	0	Payment
+PO_ACCEPTED	__MVC_PAYPO__	Payment
 SAMPLEHTML	__MVC_SAMPLEHTML__	Directories and Paths
 SAMPLEURL	__MVC_SAMPLEURL__	Directories and Paths
 SECURE_ENABLE	__MVC_ENABLESECURE__	General
 SECURE_SERVER	__MVC_SECURESERVERNAME__	Directories and Paths
 SERVER_NAME	__MVC_SERVERNAME__	Directories and Paths
-STYLE	__MVC_STYLE__	Template
+SHIP_DEFAULT_COUNTRY	US	Shipping
+SHIP_DEFAULT_MODE	upsg	Shipping
+SHIP_FLAT_DOM_RATE	5	Shipping
+SHIP_FLAT_INTL_RATE	10	Shipping
 SQLPASS	__MVC_SQLPASS__	Database
 SQLUSER	__MVC_SQLUSER__	Database
+STYLE	__MVC_STYLE__	Template
 TAXAREA	__MVC_TAXAREA__	Tax
 TAXFIELD	state	Tax
 TAXRATE	__MVC_TAXRATE__	Tax
 TAXSHIPPING	__MVC_TAXSHIPPING__	Tax
-SHIP_FLAT_INTL_RATE	10	Shipping
-SHIP_FLAT_DOM_RATE	5	Shipping
 TOLLFREE	__MVC_TOLLFREE__	Company
 UI_ABOUT_LOGIN_URL	http://www.redhat.com/ecommerce	Admin layout
 UI_ABOUT_NORMAL_URL	http://www.redhat.com/ecommerce	Admin layout
 UI_ADMIN_TABLES	mv_metadata locale variable dict icmenu ichelp route access	Admin control
 UI_BOTTOMIMG	poweredby.gif	Admin layout
+UI_COMPONENT_DIR	templates/components	Directories and Paths
 UI_HELP_HEIGHT	480	Admin layout
 UI_HELP_WIDTH	650	Admin layout
 UI_IMAGE_DIR	__MVC_SHAREURL__/interchange/	Admin control
 UI_IMAGE_DIR_SECURE	__MVC_SHAREURL__/interchange/	Admin control
 UI_META_LINK	1	Admin control
+UI_PAGE_DIR	pages	Directories and Paths
 UI_SECURE	__MVC_UISECURE__	Admin control
+UI_TEMPLATE_DIR	templates	Directories and Paths
 UI_TRAFFIC_STATS	__MVC_TRAFFICSTATS__	Directories and Paths
 UPS_COUNTRY_FIELD	country	Shipping
 UPS_ORIGIN	__MVC_UPSORIGIN__	Shipping
 UPS_POSTCODE_FIELD	zip	Shipping
-IMG_ADDCART	__MVC_IMGADDCART__	Images
-IMG_VIEWCART	__MVC_IMGVIEWCART__	Images
-IMG_CONTINUE	__MVC_IMGCONTINUE__	Images
-IMG_CHECKOUT	__MVC_IMGCHECKOUT__	Images
-IMG_MOREINFO	__MVC_IMGMOREINFO__	Images
-IMG_RECALC	__MVC_IMGRECALC__	Images
-IMG_PLACEORDER	__MVC_IMGPLACEORDER__	Images
-DICT_PRICE_STD	__MVC_DICTPRICESTD__	Labels
-DICT_PRICE_SALE	__MVC_DICTPRICEALE__	Labels



2.1       +50 -10    interchange/dist/foundation/templates/leftonly


rev 2.1, prev_rev 2.0
Index: leftonly
===================================================================
RCS file: /anon_cvs/repository/interchange/dist/foundation/templates/leftonly,v
retrieving revision 2.0
retrieving revision 2.1
diff -u -r2.0 -r2.1
--- leftonly	18 Jul 2001 02:21:32 -0000	2.0
+++ leftonly	16 Feb 2002 09:39:09 -0000	2.1
@@ -1,18 +1,58 @@
 [comment]
-ui_template: Yes
-ui_template_name: leftonly
-ui_template_version: 4.7.3
+ui_template: leftonly
+ui_type: template
+ui_name: leftonly
+ui_version: 4.9.0
+ui_label: Page with top/left areas.
+ui_source: templates/leftonly
 ui_template_layout: LEFTONLY_TOP, UI_CONTENT, LEFTONLY_BOTTOM
-ui_template_description: Page with top/left areas.
 
-page_title: 
-	description: Page title
+page_title:
+	label: Page Title
+	width: 50
 
 members_only:
+	code: members_only
+	label: Members only?
 	options: 1=Yes,=No*
-	widget: radio
-	description: Members only
+	type: yesno
 
 [/comment]
-[set page_title][set]
-[set members_only][set]
+[set page_title][/set]
+[set members_only][/set]
+
+<!-- BEGIN PAGE_PICTURE -->
+<b>Representation</b><br>
+<table width="100%">
+<tr>
+	<td colspan=2 id=picture0>preamble</td>
+</tr>
+<tr>
+	<td colspan=2 id=picture1>controls</td>
+</tr>
+<tr>
+	<td colspan=2 bgcolor="#CCCCCC"><br>header<br>&nbsp;</td>
+</tr>
+<tr>
+	<td id=comp_picture1 width="25%">slot1</td>
+	<td rowspan=3>
+		<div id=comp_picture4 style="width: 100%">slot4</div>
+		<div id=comp_picture5 style="width: 100%"><br>CONTENT<br>&nbsp;</div>
+		<div id=comp_picture6 style="width: 100%">slot5</div>
+	</td>
+</tr>
+<tr>
+	<td id=comp_picture2 width="25%">slot2</td>
+</tr>
+<tr>
+	<td id=comp_picture3 width="25%">slot3</td>
+</tr>
+
+<tr>
+	<td colspan=2 bgcolor="#CCCCCC">footer</td>
+</tr>
+<tr>
+	<td colspan=2 id=picture2>postamble</td>
+</tr>
+</table>
+<!-- END PAGE_PICTURE -->



2.1       +56 -11    interchange/dist/foundation/templates/leftright


rev 2.1, prev_rev 2.0
Index: leftright
===================================================================
RCS file: /anon_cvs/repository/interchange/dist/foundation/templates/leftright,v
retrieving revision 2.0
retrieving revision 2.1
diff -u -r2.0 -r2.1
--- leftright	18 Jul 2001 02:21:32 -0000	2.0
+++ leftright	16 Feb 2002 09:39:09 -0000	2.1
@@ -1,18 +1,63 @@
 [comment]
-ui_template: Yes
-ui_template_name: leftright
-ui_template_version: 4.7.3
+ui_template: leftright
+ui_type: template
+ui_name: leftright
+ui_version: 4.9.0
+ui_label: Page with top/left/right areas.
+ui_source: templates/leftright
 ui_template_layout: LEFTRIGHT_TOP, UI_CONTENT, LEFTRIGHT_BOTTOM
-ui_template_description: Page with top/left/right areas.
 
-page_title: 
-	description: Page title
+page_title:
+	label: Page title
+	width: 50
 
 members_only:
-	options: 1=Yes,=No*
-	widget: radio
-	description: Members only
+	label: Members only
+	type: yesno
+
+page_banner:
+	code: page_banner
+	label: Page Banner
+	type: text
+	width: 30
 
 [/comment]
-[set page_title][set]
-[set members_only][set]
+
+<!-- BEGIN PAGE_PICTURE -->
+<b>Representation</b><br>
+<table width="100%">
+<tr>
+	<td colspan=3 id=picture0>preamble</td>
+</tr>
+<tr>
+	<td colspan=3 id=picture1>controls</td>
+</tr>
+<tr>
+	<td colspan=3 bgcolor="#CCCCCC"><br>header<br>&nbsp;</td>
+</tr>
+<tr>
+	<td id=comp_picture1 width="25%">slot1</td>
+	<td rowspan=3>
+		<div id=comp_picture4 style="width: 100%">slot4</div>
+		<div id=comp_picture5 style="width: 100%"><br>CONTENT<br>&nbsp;</div>
+		<div id=comp_picture6 style="width: 100%">slot5</div>
+	</td>
+	<td id=comp_picture7>slot6</td>
+</tr>
+<tr>
+	<td id=comp_picture2 width="25%">slot2</td>
+	<td id=comp_picture8 width="25%">slot7</td>
+</tr>
+<tr>
+	<td id=comp_picture3 width="25%">slot3</td>
+	<td id=comp_picture9 width="25%">slot8</td>
+</tr>
+
+<tr>
+	<td colspan=3 bgcolor="#CCCCCC">footer</td>
+</tr>
+<tr>
+	<td colspan=3 id=picture2>postamble</td>
+</tr>
+</table>
+<!-- END PAGE_PICTURE -->



2.1       +24 -20    interchange/dist/foundation/templates/components/affiliate_receptor


rev 2.1, prev_rev 2.0
Index: affiliate_receptor
===================================================================
RCS file: /anon_cvs/repository/interchange/dist/foundation/templates/components/affiliate_receptor,v
retrieving revision 2.0
retrieving revision 2.1
diff -u -r2.0 -r2.1
--- affiliate_receptor	18 Jul 2001 02:21:34 -0000	2.0
+++ affiliate_receptor	16 Feb 2002 09:39:09 -0000	2.1
@@ -1,25 +1,29 @@
 [comment]
 ui_component: affiliate_receptor
-ui_component_type: content
-ui_component_label: Welcome affiliate program arrivals
-
-coupon_allowed: 
-		label: Allow discount coupons
-		widget: select
-		options: 1=Yes,0=No
-
-title_css: 
-		label: Style of title
-		widget: textarea
-		advanced: 1
-
-discount_css: 
-		label: Style of discount message
-		widget: textarea
-		advanced: 1
+ui_type: component
+ui_name: affiliate_receptor
+ui_class: content
+ui_label: Welcome affiliate program arrivals
+ui_source: templates/components/affiliate_receptor
+
+coupon_allowed:
+	code: coupon_allowed
+	label: Allow discount coupons
+	options: 1=Yes,0=No
+	type: select
+
+title_css:
+	advanced: 1
+	code: title_css
+	label: Style of title
+	type: textarea
+
+discount_css:
+	advanced: 1
+	label: Style of discount message
+	type: textarea
 
 [/comment]
-
 <!-- begin component [control component affiliate_receptor] -->
 [if session source]						
 [calc]
@@ -35,9 +39,9 @@
 	$Scratch->{coupon_approve} = 1;
 	return;
 [/calc]
-
+<!-- see if was published -->
 <br>
-
+<!--Change some content-->
 Welcome Affiliate Program Visitor:
 
 <br>



2.1       +20 -15    interchange/dist/foundation/templates/components/best


rev 2.1, prev_rev 2.0
Index: best
===================================================================
RCS file: /anon_cvs/repository/interchange/dist/foundation/templates/components/best,v
retrieving revision 2.0
retrieving revision 2.1
diff -u -r2.0 -r2.1
--- best	18 Jul 2001 02:21:34 -0000	2.0
+++ best	16 Feb 2002 09:39:09 -0000	2.1
@@ -1,38 +1,43 @@
-<!-- BEGIN COMPONENT [control component best] -->
 [comment]
 ui_component: best
-ui_component_type: vertical, content
-ui_component_group: promotion
-ui_component_label: Best sellers
+ui_type: component
+ui_name: best
+ui_class: vertical, content
+ui_group: promotion
+ui_label: Best sellers
+ui_source: templates/components/best
 
 banner:
-	widget: text
+	code: banner
+	type: text
 	width: 40
+	default: Best Sellers...
 
 toprow_css:
+	advanced: 1
+	height: 4
 	label: CSS describing top row
-	widget: textarea
+	type: textarea
 	width: 60
-	height: 4
-	advanced: 1
 
 toprow_color:
-	widget: text
-	width: 7
 	advanced: 1
+	type: text
+	width: 7
 
 matches:
-	widget: select
-	options: 1,2*,3,4,5,6,7,8,9,10
 	help: If you select more matches than columns, multiple rows will be generated.
+	options: 1,2,3,4,5,6,7,8,9,10
+	type: select
+	default: 2
 
 cols:
 	label: Columns
-	widget: select
-	options: 1,2*,3,4
+	options: 1,2,3,4
+	type: select
+	default: 2
 
 [/comment]
-
 <table width="95%" align=center>
 <tr> 
   <td class="categorybar"> 



2.3       +13 -11    interchange/dist/foundation/templates/components/cart


rev 2.3, prev_rev 2.2
Index: cart
===================================================================
RCS file: /anon_cvs/repository/interchange/dist/foundation/templates/components/cart,v
retrieving revision 2.2
retrieving revision 2.3
diff -u -r2.2 -r2.3
--- cart	6 Feb 2002 16:42:23 -0000	2.2
+++ cart	16 Feb 2002 09:39:09 -0000	2.3
@@ -1,19 +1,21 @@
 [comment]
 ui_component: cart
-ui_component_type: content
-ui_component_group: checkout
-ui_component_label: Shopping cart display (full)
+ui_type: component
+ui_name: cart
+ui_class: content
+ui_group: checkout
+ui_label: Shopping cart display (full)
+ui_source: templates/components/cart
 
 others_bought:
 	label: Use "others who bought this" here
-	widget: yesno
+	type: yesno
 
 upsell_in_cart:
 	label: Put upsell come-in under item
-	widget: yesno
+	type: yesno
 
 [/comment]
-
 <!-- BEGIN COMPONENT [control component cart] -->
 
 <table width="95%" cellspacing="0">
@@ -37,7 +39,7 @@
 	[/else]
 	[/if]
 
-	<FORM ACTION="[process secure=1]" METHOD=POST name="basket">
+	<FORM ACTION="[process-target secure=1]" METHOD=POST name="basket">
     	<INPUT TYPE=hidden NAME=mv_session_id VALUE="[data session id]">
     	<INPUT TYPE=hidden NAME=mv_doit      VALUE=refresh>
     	<INPUT TYPE=hidden NAME=mv_orderpage VALUE="ord/basket">
@@ -101,10 +103,10 @@
 
 	<TR class="[item-calc]$row_class || 'contentbar1'[/item-calc]">
 		<TD align=center>
-	    		<INPUT TYPE=checkbox NAME="[quantity-name]" onClick="this.form.action='[process]', this.form.submit()" VALUE=0>
+	    		<INPUT TYPE=checkbox NAME="[quantity-name]" onClick="this.form.action='[process-target]', this.form.submit()" VALUE=0>
 	  	</TD>
 	  	<TD><b>[item-sku]</b></TD>
-	  	<td>[page [item-sku]]<b>[item-description]</b></A>
+	  	<td>[page [item-sku]]<b>[item-data products description]</b></A>
 
 	[if scratch dealer]
 	[if-item-data pricing sku]
@@ -413,7 +415,7 @@
 
 [if session logged_in][then]
   [if value save_cart eq 'recurring']
-    	    <FORM ACTION="[process]" METHOD=POST>
+    	    <FORM ACTION="[process-target]" METHOD=POST>
     	    To save this recurring order, give it a nickname, then press 'Save Cart'.<br>
     	    Nickname:
     	    <INPUT TYPE=TEXT NAME="c_nickname" SIZE=11 VALUE="[scratch just_nickname]">
@@ -425,7 +427,7 @@
     	    <INPUT TYPE=SUBMIT VALUE="Save Cart">
     	    </FORM>
   [elsif value save_cart eq 'cart']
-    	    <FORM ACTION="[process]" METHOD=POST>
+    	    <FORM ACTION="[process-target]" METHOD=POST>
     	    To save this cart, give it a nickname, then press 'Save Cart'.<br>
     	    Nickname:
     	    <INPUT TYPE=TEXT NAME="c_nickname" SIZE=11 VALUE="[scratch just_nickname]">



2.1       +7 -4      interchange/dist/foundation/templates/components/cart_display


rev 2.1, prev_rev 2.0
Index: cart_display
===================================================================
RCS file: /anon_cvs/repository/interchange/dist/foundation/templates/components/cart_display,v
retrieving revision 2.0
retrieving revision 2.1
diff -u -r2.0 -r2.1
--- cart_display	18 Jul 2001 02:21:34 -0000	2.0
+++ cart_display	16 Feb 2002 09:39:09 -0000	2.1
@@ -1,11 +1,14 @@
 [comment]
 ui_component: cart_display
-ui_component_type: content
-ui_component_group: info
-ui_component_label: Smaller cart for display in content area
+ui_type: component
+ui_name: cart_display
+ui_class: content
+ui_group: info
+ui_label: Smaller cart for display in content area
+ui_source: templates/components/cart_display
 
-[/comment]
 
+[/comment]
 <!-- BEGIN COMPONENT [control component cart_display] -->
 [if items]
 <center>



2.1       +7 -4      interchange/dist/foundation/templates/components/cart_tiny


rev 2.1, prev_rev 2.0
Index: cart_tiny
===================================================================
RCS file: /anon_cvs/repository/interchange/dist/foundation/templates/components/cart_tiny,v
retrieving revision 2.0
retrieving revision 2.1
diff -u -r2.0 -r2.1
--- cart_tiny	18 Jul 2001 02:21:34 -0000	2.0
+++ cart_tiny	16 Feb 2002 09:39:09 -0000	2.1
@@ -1,11 +1,14 @@
 [comment]
 ui_component: cart_tiny
-ui_component_type: vertical
-ui_component_group: info
-ui_component_label: Small cart for left/right display
+ui_type: component
+ui_name: cart_tiny
+ui_class: vertical
+ui_group: info
+ui_label: Small cart for left/right display
+ui_source: templates/components/cart_tiny
 
-[/comment]
 
+[/comment]
 <!-- BEGIN COMPONENT [control component cart_tiny] -->
 
 <tr><td align="center">



2.1       +15 -12    interchange/dist/foundation/templates/components/category_horizontal


rev 2.1, prev_rev 2.0
Index: category_horizontal
===================================================================
RCS file: /anon_cvs/repository/interchange/dist/foundation/templates/components/category_horizontal,v
retrieving revision 2.0
retrieving revision 2.1
diff -u -r2.0 -r2.1
--- category_horizontal	18 Jul 2001 02:21:34 -0000	2.0
+++ category_horizontal	16 Feb 2002 09:39:09 -0000	2.1
@@ -1,26 +1,29 @@
 [comment]
 ui_component: category_horizontal
-ui_component_type: horizontal
-ui_component_group: navigation
-ui_component_label: Horizontal category list
+ui_type: component
+ui_name: category_horizontal
+ui_class: horizontal
+ui_group: navigation
+ui_label: Horizontal category list
+ui_source: templates/components/category_horizontal
 
 page_class:
-	label: Page class
-	widget: select
-	lookup: which_page
+	advanced: 1
 	db: area
 	help: Defines which sets of items should be displayed
-	advanced: 1
+	label: Page class
+	lookup: which_page
+	type: select
 
 set_selector:
-	label: Page area selector
-	widget: select
+	advanced: 1
 	db: area
-	lookup: sel
 	help: Defines which sets of items should be displayed
-	advanced: 1
-[/comment]
+	label: Page area selector
+	lookup: sel
+	type: select
 
+[/comment]
 <tr><td align="left" class="categorybar">
   <br>
   <table width="90%" align="center">



2.1       +20 -15    interchange/dist/foundation/templates/components/category_vertical


rev 2.1, prev_rev 2.0
Index: category_vertical
===================================================================
RCS file: /anon_cvs/repository/interchange/dist/foundation/templates/components/category_vertical,v
retrieving revision 2.0
retrieving revision 2.1
diff -u -r2.0 -r2.1
--- category_vertical	18 Jul 2001 02:21:34 -0000	2.0
+++ category_vertical	16 Feb 2002 09:39:09 -0000	2.1
@@ -1,33 +1,37 @@
 [comment]
 ui_component: category_vertical
-ui_component_type: vertical
-ui_component_group: Navigation
-ui_component_label: Vertical category list
+ui_type: component
+ui_name: category_vertical
+ui_class: vertical
+ui_group: Navigation
+ui_label: Vertical category list
+ui_source: templates/components/category_vertical
 
 page_class:
-	label: Page class
-	widget: select
-	lookup: which_page
+	advanced: 1
 	db: area
 	help: Defines which sets of items should be displayed
-	advanced: 1
+	label: Page class
+	lookup: which_page
+	type: select
 
 set_selector:
-	label: Page area selector
-	widget: select
+	advanced: 1
 	db: area
-	lookup: sel
 	help: Defines which sets of items should be displayed
-	advanced: 1
+	label: Page area selector
+	lookup: sel
+	type: select
 
 timed:
-	label: Use timed build
-	widget: select
+	advanced: 1
+	code: timed
 	help: Makes more efficient for large/busy catalogs
+	label: Use timed build
 	options: 0=No, 5=5 minutes, 10=10 minutes, 20=20 minutes, 60=60 minutes, 1440=Daily
-	advanced: 1
-[/comment]
+	type: select
 
+[/comment]
 <tr><td align="left" class="categorybar">
   <br>
   <table width="90%" align="center">
@@ -67,6 +71,7 @@
 	search="
 		fi=cat
 		st=db
+		co=yes
 		tf=sort
 		tf=name
 		rf=code,name



2.1       +18 -16    interchange/dist/foundation/templates/components/cross


rev 2.1, prev_rev 2.0
Index: cross
===================================================================
RCS file: /anon_cvs/repository/interchange/dist/foundation/templates/components/cross,v
retrieving revision 2.0
retrieving revision 2.1
diff -u -r2.0 -r2.1
--- cross	18 Jul 2001 02:21:34 -0000	2.0
+++ cross	16 Feb 2002 09:39:09 -0000	2.1
@@ -1,38 +1,40 @@
 [comment]
 ui_component: cross
-ui_component_type: content, vertical
-ui_component_group: promotions
-ui_component_label: Cross-sell or specific feature
-ui_component_help: depends on setting cross_codes or cross_category in page, \
-falls back to featured/specials.
+ui_type: component
+ui_name: cross
+ui_class: content, vertical
+ui_group: promotions
+ui_help: depends on setting cross_codes or cross_category in page, falls back to featured/specials.
+ui_label: Cross-sell or specific feature
+ui_source: templates/components/cross
+
+banner:
+	code: banner
+	default: See also...
+	label: Top row banner
+	type: text
+	width: 40
 
 size:
 	label: Number of selections
-	widget: select
 	options: 1,2,3*,4,5,6,7,8,9,10
+	type: select
 
 cols:
 	label: Number of columns
-	widget: select
 	options: 1,2,3*,4,5,6,7,8,9,10
-
-banner:
-	label: Top row banner
-	widget: text
-	width: 40
-	default: See also...
+	type: select
 
 cross_codes:
 	label: Specific featured products (sku)
-	widget: text
+	type: text
 	width: 40
 
 random:
 	label: Random order?
-	widget: yesno
+	type: yesno
 
 [/comment]
-
 <!-- BEGIN COMPONENT [control component cross_horizontal] -->
 [if !scratch cross_codes]
 [tmp cross_codes][control cross_codes][/tmp]



2.1       +16 -13    interchange/dist/foundation/templates/components/fortune


rev 2.1, prev_rev 2.0
Index: fortune
===================================================================
RCS file: /anon_cvs/repository/interchange/dist/foundation/templates/components/fortune,v
retrieving revision 2.0
retrieving revision 2.1
diff -u -r2.0 -r2.1
--- fortune	18 Jul 2001 02:21:34 -0000	2.0
+++ fortune	16 Feb 2002 09:39:09 -0000	2.1
@@ -1,23 +1,26 @@
 [comment]
 ui_component: fortune
-ui_component_type: vertical
-ui_component_group: info
-ui_component_label: Random saying
+ui_type: component
+ui_name: fortune
+ui_class: vertical
+ui_group: info
+ui_label: Random saying
+ui_source: templates/components/fortune
+
+banner:
+	code: banner
+	default: Just a thought...
+	label: Banner Foo
+	type: text
+	width: 33
 
 short:
-	widget: select
-	options: Yes, No
 	default: 1
 	label: Short only?
-
-banner:
-	widget: text_20
-	default: Just a thought...
-	label: Banner
+	type: yesno
 
 [/comment]
-
-<!-- BEGIN COMPONENT [control component cart_tiny] -->
+<!-- BEGIN COMPONENT [control component fortune] -->
 
 <tr><td align="center">
   <table width="95%">
@@ -41,4 +44,4 @@
   </table>
 </td></tr>
 
-<!-- END COMPONENT [control component cart_tiny] -->
+<!-- END COMPONENT [control component fortune] -->



2.1       +7 -2      interchange/dist/foundation/templates/components/none


rev 2.1, prev_rev 2.0
Index: none
===================================================================
RCS file: /anon_cvs/repository/interchange/dist/foundation/templates/components/none,v
retrieving revision 2.0
retrieving revision 2.1
diff -u -r2.0 -r2.1
--- none	18 Jul 2001 02:21:34 -0000	2.0
+++ none	16 Feb 2002 09:39:09 -0000	2.1
@@ -1,5 +1,10 @@
 [comment]
 ui_component: none
-ui_component_type: ALL
-ui_component_label: No component
+ui_type: component
+ui_name: none
+ui_class: ALL
+ui_label: No component
+ui_source: templates/components/none
+
+
 [/comment]



2.4       +11 -9     interchange/dist/foundation/templates/components/promo


rev 2.4, prev_rev 2.3
Index: promo
===================================================================
RCS file: /anon_cvs/repository/interchange/dist/foundation/templates/components/promo,v
retrieving revision 2.3
retrieving revision 2.4
diff -u -r2.3 -r2.4
--- promo	13 Oct 2001 23:27:49 -0000	2.3
+++ promo	16 Feb 2002 09:39:09 -0000	2.4
@@ -1,32 +1,34 @@
 [comment]
 ui_component: promo
-ui_component_type: content, vertical
-ui_component_group: promotion
-ui_component_label: Promotion
+ui_type: component
+ui_name: promo
+ui_class: content, vertical
+ui_group: promotion
+ui_label: Promotion
+ui_source: templates/components/promo
 
 promo_type:
 	label: Promotion type
 	options: specials=Specials, new=New items
-	widget: select
+	type: select
 
 matches:
 	label: Number to show
-	widget: select
 	options: 1,2,3*,4,5,6,7,8,9,10
+	type: select
 
 cols:
 	label: Columns
 	options: 1,2,3*,4
-	widget: select
+	type: select
 
 banner:
-	label: Banner for top box
 	default: Specials
-	widget: text
+	label: Banner for top box
+	type: text
 	width: 40
 
 [/comment]
-
 <!-- BEGIN COMPONENT [control component promo] -->
 
 <table width="95%" align=center>



2.1       +13 -12    interchange/dist/foundation/templates/components/random


rev 2.1, prev_rev 2.0
Index: random
===================================================================
RCS file: /anon_cvs/repository/interchange/dist/foundation/templates/components/random,v
retrieving revision 2.0
retrieving revision 2.1
diff -u -r2.0 -r2.1
--- random	18 Jul 2001 02:21:34 -0000	2.0
+++ random	16 Feb 2002 09:39:09 -0000	2.1
@@ -1,39 +1,40 @@
 [comment]
 ui_component: random
-ui_component_type: content, vertical
-ui_component_group: promotion
-ui_component_label: Random items
+ui_type: component
+ui_name: random
+ui_class: content, vertical
+ui_group: promotion
+ui_label: Random items
+ui_source: templates/components/random
 
 matches:
 	label: Number to show
-	widget: select
 	options: 1,2*,3,4,5,6,7,8,9,10
+	type: select
 
 pool:
+	help: Controls now many items will be returned and randomized, always from the beginning of the database/text file
 	label: Number to select from
-	widget: select
 	options: 100,1000*,10000
-	help: Controls now many items will be returned and randomized, \
-always from the beginning of the database/text file
+	type: select
 
 table_width:
+	filter: nullselect
 	label: Table width
 	options: 150,300,450
-	widget: combo
-	filter: nullselect
+	type: combo
 
 cols:
 	label: Columns
 	options: 1*,2,3,4
-	widget: select
+	type: select
 
 banner:
 	label: Banner for top box
-	widget: text
+	type: text
 	width: 40
 
 [/comment]
-
 <!-- BEGIN COMPONENT [control component random] -->
 
 <br>



2.1       +7 -4      interchange/dist/foundation/templates/components/saved_carts_list_small


rev 2.1, prev_rev 2.0
Index: saved_carts_list_small
===================================================================
RCS file: /anon_cvs/repository/interchange/dist/foundation/templates/components/saved_carts_list_small,v
retrieving revision 2.0
retrieving revision 2.1
diff -u -r2.0 -r2.1
--- saved_carts_list_small	18 Jul 2001 02:21:34 -0000	2.0
+++ saved_carts_list_small	16 Feb 2002 09:39:09 -0000	2.1
@@ -1,11 +1,14 @@
 [comment]
 ui_component: saved_carts_list_small
-ui_component_type: vertical
-ui_component_group: info
-ui_component_label: Small saved cart list for left/right display
+ui_type: component
+ui_name: saved_carts_list_small
+ui_class: vertical
+ui_group: info
+ui_label: Small saved cart list for left/right display
+ui_source: templates/components/saved_carts_list_small
 
-[/comment]
 
+[/comment]
 <!-- BEGIN COMPONENT [control component saved_carts_list_small] -->
 
 [tmp myimagedir][image dir_only=1 ui=1][/tmp]



2.2       +15 -10    interchange/dist/foundation/templates/components/search_box_small


rev 2.2, prev_rev 2.1
Index: search_box_small
===================================================================
RCS file: /anon_cvs/repository/interchange/dist/foundation/templates/components/search_box_small,v
retrieving revision 2.1
retrieving revision 2.2
diff -u -r2.1 -r2.2
--- search_box_small	28 Dec 2001 17:15:13 -0000	2.1
+++ search_box_small	16 Feb 2002 09:39:09 -0000	2.2
@@ -1,17 +1,18 @@
-<!-- BEGIN COMPONENT [control component search_box_small] -->
 [comment]
 ui_component: search_box_small
-ui_component_type: vertical
-ui_component_group: search
-ui_component_label: Small search box
+ui_type: component
+ui_name: search_box_small
+ui_class: vertical
+ui_group: search
+ui_label: Small search box
+ui_source: templates/components/search_box_small
 
 matches:
-	widget: select
-	options: 1,2,3,5,10*,20,25,50,100
 	help: Matches to return to page
+	options: 1,2,3,5,10*,20,25,50,100
+	type: select
 
 [/comment]
-
 <tr><td align="center">
   <table>
   <tr> 
@@ -22,16 +23,20 @@
       <table border="0" width="95%">
       <tr> 
 	    <td align="left">
+	  	  <INPUT TYPE=hidden NAME=mv_coordinate VALUE=1>
 	      <INPUT TYPE=hidden NAME=mv_searchtype VALUE=db>
 	      <INPUT TYPE=hidden NAME=mv_matchlimit VALUE=[control matches 10]>
 	      <INPUT TYPE=hidden NAME=mv_sort_field VALUE=category>
 	      <INPUT TYPE=hidden NAME=mv_search_field VALUE="*">
-	      <INPUT TYPE=hidden NAME=mv_substring_match VALUE=1>
-	      <INPUT TYPE=text NAME=mv_searchspec SIZE=10 MAXLENGTH=30>
+	      <input type=hidden name=mv_substring_match value=1>
+	      <INPUT TYPE=hidden NAME=mv_column_op VALUE=ne>
+	      <INPUT TYPE=hidden NAME=mv_column_op VALUE=rm>
+	      <INPUT TYPE=hidden NAME=mv_searchspec VALUE=1>
+	      <INPUT MAXLENGTH=30 NAME=mv_searchspec type=text size=8>
 	    </td>
 	    <td align="right" valign="middle" width="45">
 	      <input type="image" alt="Search Go" width="45" border="0" src="__THEME_IMG_DIR__go.gif">
-	      <a href="[area advancedsearch]"><font size="-2" class="categorybar">Advanced</a>
+	      <a href="[area advancedsearch]"><font size=-2 class="categorybar">Advanced</a>
 	    </td>
       </tr>
       </table>



2.2       +16 -10    interchange/dist/foundation/templates/components/search_box_small_top


rev 2.2, prev_rev 2.1
Index: search_box_small_top
===================================================================
RCS file: /anon_cvs/repository/interchange/dist/foundation/templates/components/search_box_small_top,v
retrieving revision 2.1
retrieving revision 2.2
diff -u -r2.1 -r2.2
--- search_box_small_top	28 Dec 2001 17:15:13 -0000	2.1
+++ search_box_small_top	16 Feb 2002 09:39:09 -0000	2.2
@@ -1,17 +1,19 @@
-<!-- BEGIN COMPONENT [control component search_box_small_top] -->
 [comment]
 ui_component: search_box_small_top
-ui_component_type: horizontal
-ui_component_group: search
-ui_component_label: Small search box (for top area)
+ui_type: component
+ui_name: search_box_small_top
+ui_class: horizontal
+ui_group: search
+ui_label: Small search box (for top area)
+ui_source: templates/components/search_box_small_top
 
 matches:
-	widget: select
-	options: 1,2,3,5,10*,20,25,50,100
 	help: Matches to return to page
+	options: 1,2,3,5,10*,20,25,50,100
+	type: select
 
 [/comment]
-
+<!-- BEGIN COMPONENT [control component search_box_small] -->
 <tr><td align="center">
   <table>
   <tr> 
@@ -22,16 +24,20 @@
       <table border="0" width="95%">
       <tr> 
   	    <td align="left">
+	      <INPUT TYPE=hidden NAME=mv_coordinate VALUE=1>
 	      <INPUT TYPE=hidden NAME=mv_searchtype VALUE=db>
 	      <INPUT TYPE=hidden NAME=mv_matchlimit VALUE=[control matches 10]>
 	      <INPUT TYPE=hidden NAME=mv_sort_field VALUE=category>
 	      <INPUT TYPE=hidden NAME=mv_search_field VALUE="*">
-		  <INPUT TYPE=hidden NAME=mv_substring_match VALUE=1>
-	      <INPUT TYPE=text NAME=mv_searchspec SIZE=10 MAXLENGTH=30>
+	      <input type=hidden name=mv_substring_match value=1>
+	      <INPUT TYPE=hidden NAME=mv_column_op VALUE=ne>
+	      <INPUT TYPE=hidden NAME=mv_column_op VALUE=rm>
+	      <INPUT TYPE=hidden NAME=mv_searchspec VALUE=1>
+	      <INPUT MAXLENGTH=30 NAME=mv_searchspec type=text size=8>
 	    </td>
 	    <td align="right" valign="middle" width="45">
 	      <input type="image" alt="Search Go" width="45" border="0" src="__THEME_IMG_DIR__go.gif">
-	      <a href="[area advancedsearch]"><font size="-2" class="menubar">Advanced</a>
+	      <a href="[area advancedsearch]"><font size=-2 class="menubar">Advanced</a>
 	    </td>
       </tr>
       </table>



2.1       +15 -13    interchange/dist/foundation/templates/components/upsell


rev 2.1, prev_rev 2.0
Index: upsell
===================================================================
RCS file: /anon_cvs/repository/interchange/dist/foundation/templates/components/upsell,v
retrieving revision 2.0
retrieving revision 2.1
diff -u -r2.0 -r2.1
--- upsell	18 Jul 2001 02:21:34 -0000	2.0
+++ upsell	16 Feb 2002 09:39:09 -0000	2.1
@@ -1,31 +1,33 @@
 [comment]
 ui_component: upsell
-ui_component_type: content, vertical
-ui_component_group: promotions
-ui_component_label: Upsell
-ui_component_help: depends on setting upsell codes in cart or flypage
+ui_type: component
+ui_name: upsell
+ui_class: content, vertical
+ui_group: promotions
+ui_help: depends on setting upsell codes in cart or flypage
+ui_label: Upsell
+ui_source: templates/components/upsell
+
+banner:
+	label: Top row banner
+	type: text
+	width: 40
 
 size:
 	label: Number of selections
-	widget: select
 	options: 1,2*,3,4,5,6,7,8,9,10
+	type: select
 
 cols:
 	label: Number of selections
-	widget: select
 	options: 1,2*,3,4,5,6,7,8,9,10
-
-banner:
-	label: Top row banner
-	widget: text
-	width: 40
+	type: select
 
 random:
 	label: Random order?
-	widget: yesno
+	type: yesno
 
 [/comment]
-
 <!-- BEGIN COMPONENT [control component upsell] -->
 
 [if scratch upsell]



2.4       +4 -4      interchange/dist/lib/UI/icmenu.txt


rev 2.4, prev_rev 2.3
Index: icmenu.txt
===================================================================
RCS file: /anon_cvs/repository/interchange/dist/lib/UI/icmenu.txt,v
retrieving revision 2.3
retrieving revision 2.4
diff -u -r2.3 -r2.4
--- icmenu.txt	4 Feb 2002 07:44:49 -0000	2.3
+++ icmenu.txt	16 Feb 2002 09:39:10 -0000	2.4
@@ -2,7 +2,7 @@
 0001	Top	01		Orders		order	admin/order		Orders			View and manage incoming orders, archive and access past orders		B2.gif	B2_b.gif	B2_b.gif	icon_orders.gif	
 0002	Top	02		Customers		userdb	admin/customer		Customers			View and manage customer information and order history		B3.gif	B3_b.gif	B3_b.gif	icon_people.gif	
 0003	Top	03		Items		item	admin/item		Items			Add and edit items displayed for sale on the site		B4.gif	B4_b.gif	B4_b.gif	icon_item.gif	
-0004	Top	04		Content		page	admin/page		Content			Create, edit, upload and download pages		B5.gif	B5_b.gif	B5_b.gif	icon_pages.gif	
+0004	Top	04		Content		content	admin/content		Content			Create, edit, upload and download pages		B5.gif	B5_b.gif	B5_b.gif	icon_pages.gif	
 0005	Top	05		Design		layout	admin/layout		Design			Organize site navigation, manage site layout		B6.gif	B6_b.gif	B6_b.gif	icon_design.gif	
 0006	Top	06		Merchandising		item	admin/merchandising		Merchandising			Set up quantity pricing, up-sell, promotions, and affiliates		B7.gif	B7_b.gif	B7_b.gif	icon_merch.gif	
 0007	Top	07		Reports		stats	admin/orderstats		Reports			View statistics on orders and site traffic, create custom reports		B8.gif	B8_b.gif	B8_b.gif	icon_stats.gif	
@@ -15,7 +15,8 @@
 0015	Admin	06					admin/preferences		Preferences									
 0016	Admin	07					admin/flex_select	mv_data_table=variable&page_title=Knar editor&ui_meta_specific=1&help_name=knar.main&ui_description_fields=code&ui_return_to=admin/flex_select&ui_return_to=mv_data_table=variable&ui_return_to=page_title=Knar Editor	Knar		1							
 0017	Admin	08					admin/gentable		Tables									
-0017b	Admin	08b					admin/wizard/index		Wizard									
+0017b	Admin	08b					admin/auto_wizard		Wizard									
+0017c	Admin	08c					admin/test_code		Test code									
 0018	Admin	09					admin/reconfig	ui_changes_made	&nbsp;&nbsp;&nbsp;Apply Changes									
 0019	Admin	10	1		no_dbmenu	mv_data_table	admin/flex_select	mv_data_table=[cgi mv_data_table]	Edit									
 0020	Admin	11			no_dbmenu	mv_data_table	admin/import_table	mv_data_table=[cgi mv_data_table]	Import Data									
@@ -27,8 +28,7 @@
 0024	Admin	15			no_dbmenu	mv_data_table	admin/gentable		&nbsp;&nbsp;&nbsp;&nbsp;Re-select Table									
 0025	Admin	16	1			access_menu	admin/access		Users									
 0026	Admin	17				access_menu	admin/group		Groups									
-0027	Content	01					admin/page		Page Edit									
-0028	Content	02					admin/template		Template Edit									
+0027	Content	01					admin/content		Content Edit									
 0029	Content	03					admin/file_transfer		File Transfer									
 0030	Customers	01		showactive			admin/customer	showactive=1	Active Customers									
 0031	Customers	02		showinactive			admin/customer	showinactive=1	Inactive Customers									



2.1                  interchange/dist/lib/UI/ContentEditor.pm


rev 2.1, prev_rev 2.0



1.2       +6 -1      interchange/dist/lib/UI/pages/admin/test_code.html


rev 1.2, prev_rev 1.1
Index: test_code.html
===================================================================
RCS file: /anon_cvs/repository/interchange/dist/lib/UI/pages/admin/test_code.html,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- test_code.html	8 Feb 2002 23:08:21 -0000	1.1
+++ test_code.html	16 Feb 2002 09:39:10 -0000	1.2
@@ -23,7 +23,12 @@
 [/if]
 	<tr>
 		<td>
-		<textarea name=itl_code rows=20 cols=80>[filter op=entities][scratchd itl_code][/filter]</textarea>
+		[display
+			type=textarea
+			name=itl_code
+			rows=20 cols=80
+			value="[scratchd itl_code]"
+			enable-itl=1]
 		<br>
 		<input type=submit value="[L]Run[/L]"> <input type=button value="[L]Clear[/L]" onClick="this.form.itl_code.value=''"> [display type=select name=xmp cgi-default=1 options="1=Source, 0=HTML"]
 		</td>



1.1                  interchange/dist/lib/UI/pages/admin/auto_wizard.html


rev 1.1, prev_rev 1.0
Index: auto_wizard.html
===================================================================
[set page_title]Auto-wizard[/set]
[set ui_class]Admin[/set]
[set help_name]autowizard[/set]
[set icon_name]icon_pages.gif[/set]
[set ui_body_extra][/set]

[if cgi script]
	[auto-wizard compile=1 interpolate=1]
		[calc reparse=0] return $CGI->{script} [/calc]
	[/auto-wizard]
[elsif cgi wizard_name]
	[auto-wizard name="[cgi wizard_name]"][/auto-wizard]
[/elsif]
[/if]

@_UI_STD_HEAD_@

<!-- BEGIN CONTENT -->

[if cgi wizard_name]
	[auto-wizard show=1][/auto-wizard]
[else]


<FORM ACTION="[area @@MV_PAGE@@]" METHOD=POST>
<textarea cols=80 rows=20 name=script></textarea><BR>
Wizard Name: <input type=text name=wizard_name value="default">
<input type=submit value="Save wizard">
<input type=checkbox name=do_now value=1 CHECKED> Do now
</form>
<br>
<FORM ACTION="[area @@MV_PAGE@@]" METHOD=POST>
You can create a wizard with a text file like the below, which will create
one named <b><i>begin</i></b>:<BR>
<textarea name=script cols=80 rows=44>
[filter entities]
begin: test_wizard

1: What is your name and address?
	fname: First name
	type: text
	check: required
	help: <<EOF
Some help is needed on this one.
<br>
And it has more than one line.
EOF
	width: 20

	lname: Last name
	check: required
	type: text
	width: 20

	country: Country
	type: select
	lookup_query: select code,name from country order by name
	database: country
	default: US

2: What is your city and state?
perl: <<EOR
	if( $Values->{country} eq 'CA' ) {
		$Tag->error( { name => 'country', set => 'Not those hosers! 8-)' });
		return -1;
	}
	else {
		return 0;
	}
EOR
	address: Address
	type: textarea
	height: 4
	width: 50

	city: City

	state: State
	type: select
	lookup_query=i: select state,name from state where country = '[value country]'
	database: state


3: What is fast contact info?
	phone_day: Daytime phone
	widget: text
	width: 15

	email: Email Address
	check: email

final: Finished collection...
	page: account
	mv_action: return
	remap: address=address1
	auto: 1
	template: <<EOF
<A HREF="{URL}"> This is a fed-in template, use this link</A>
EOF
[/filter]
</textarea><BR>
Wizard Name: <input type=text name=wizard_name value="default">
<input type=submit value="Save wizard">
<input type=checkbox name=do_now value=1 CHECKED> Do now
</form>
Clip and past it in to give it a try.
[/else]
[/if]

<!-- END CONTENT -->
@_UI_STD_FOOTER_@
<!-- page: @@MV_PAGE@@ -->



1.1                  interchange/dist/lib/UI/pages/admin/content.html


rev 1.1, prev_rev 1.0
Index: content.html
===================================================================
[set page_perm]page[/set]
[set page_title][L]Content editor[/L][/set]
[set ui_class]Content[/set]
[set help_name]page.editor[/set]
[set icon_name]icon_pages.gif[/set]
@_UI_STD_HEAD_@

<!-- ----- BEGIN REAL STUFF ----- -->

<form action="[area @@MV_PAGE@@]" method=POST>
<input type=hidden name=mv_session_id value="[data session id]">
<input type=hidden name=mv_action value=back>

[if scratch ui_error]
<BLOCKQUOTE>
<FONT COLOR="__CONTRAST__" SIZE=+1>
[scratchd ui_error]
</FONT>
</BLOCKQUOTE>
[/if]

[calc]
	sub tmp_display_in_progress {
		my ($type) = shift;
		my $store;
		return unless exists $Session->{content_edit} and $Session->{content_edit};
		return unless $store = $Session->{content_edit}{$type};
		my $out = '';
		for (sort keys %$store) {
			defined $store->{$_}
				or delete $store->{$_}, next;
			$store->{$_}{ui_name}
				or delete $store->{$_}, next;
			$out .= $Tag->page( {
								href => '__UI_BASE__/content_editor',
								form => 'auto',
								ui_name => $_,
								ui_type => $type,
							});
			$out .= "$_</a>&nbsp;(";
			$out .= $Tag->page( {
								href => '@@MV_PAGE@@',
								form => 'auto',
								ui_name => $_,
								ui_type => $type,
								ui_content_op => 'cancel',
							});
			$out .= "cancel</a>)<br>";
		}
		return unless $out;
		$out = '<b>In process</b><br>' . $out . '<br>';
		return $out;
	}
	return;
[/calc]

[if cgi ui_content_op]
<!-- [content-modify] -->
[/if]

[if session content_edit]
	<A HREF="[area href=@@MV_PAGE@@ form='ui_content_op=purge']"
				onClick="return confirm('Are you sure you want to purge all in-process edits?')"
	>Purge all in-process</A>
[/if]

[warnings auto=1]

[if type=explicit compare="[error all=1 show_var=1 keep=1]"]
<B>There were errors:<br>
<blockquote>
<FONT color="__CONTRAST__">
	[error all=1 keep=1 show_error=1 show_label=1 joiner="<br>"]
</font>
</blockquote>
[/if]

<table border=0 __UI_T_PROPERTIES__>
<tr>
<td colspan=3 bgcolor=__UI_C_TOPBLOCKBAR__><img src="bg.gif" width="100%" height=1></td>
</tr>

<tr>
	<td bgcolor="__UI_C_INTBLOCK__" valign=top width="33%">
	<h2>Pages</h2>
	[calc] tmp_display_in_progress('page'); [/calc]
	<A HREF="[area
					href=__UI_BASE__/content_editor
					form=auto
					ui_type=page
					new=1
				]"><img src="layout.gif" border=0 align=textmiddle> [L]New page[/L]</A><br><br>
	[file-navigator
			initial_dir="__UI_PAGE_DIR__"
			start_open="__UI_PAGE_DIR__"
			edit_only=1
			edit_all=1
			edit_page=content_editor
			edit_form="ui_name=~RN~&ui_type=page"
			]
	</td>

	<td bgcolor="__UI_C_INTBLOCK__" valign=top width="33%">
	<h2>Templates</h2>
	[calc] tmp_display_in_progress('template'); [/calc]
	<A HREF="[area
					href=__UI_BASE__/content_editor
					form=auto
					ui_type=template
					new=1
				]"><img src="layout.gif" border=0 align=textmiddle> [L]New template[/L]</A><br><br>
	[file-navigator
			initial_dir="__UI_TEMPLATE_DIR__"
			start_open="__UI_TEMPLATE_DIR__"
			edit_only=1
			edit_all=1
			edit_page=content_editor
			edit_form="ui_name=~RN~&ui_type=template"
			]
	</td>

	<td bgcolor="__UI_C_INTBLOCK__" valign=top width="33%">
	<h2>Components</h2>
	[calc] tmp_display_in_progress('component'); [/calc]
	<A HREF="[area
					href=__UI_BASE__/content_editor
					form=auto
					ui_type=component
					new=1
				]"><img src="layout.gif" border=0 align=textmiddle> [L]New component[/L]</A><br><br>
	[file-navigator
			initial_dir="__UI_COMPONENT_DIR__"
			start_open="__UI_COMPONENT_DIR__"
			edit_only=1
			edit_all=1
			edit_page=content_editor
			edit_form="ui_name=~RN~&ui_type=component"
			]
	</td>
</tr>

<tr>
<td colspan=3 bgcolor=__UI_C_TOPBLOCKBAR__><img src="bg.gif" width=__UI_MAIN_WIDTH__ height=1></td>
</tr>

</table>

</form>


<!-- ----- END REAL STUFF ----- -->

@_UI_STD_FOOTER_@
<!-- page: @@MV_PAGE@@ -->



1.1                  interchange/dist/lib/UI/pages/admin/content_editor.html


rev 1.1, prev_rev 1.0
Index: content_editor.html
===================================================================
[set page_perm]page[/set]
[set ui_class]Content[/set]
[set help_name]page.editor[/set]
[set icon_name]icon_pages.gif[/set]
[seti page_title]Edit [cgi ui_type] [cgi ui_name][/seti]
[seti page_banner]Edit [cgi ui_type] <i>[cgi ui_name]<i>[/seti]

[comment]This modifies content when regular CGI submit is used[/comment]
[if cgi ui_content_op]
	[tmp ce_status][content-modify][/tmp]
[/if]

[comment]
	This modifies content when silent process is used, set also in
	ContentEditor.pm
[/comment]
[set ce_modify][content-modify][/set]

@_UI_STD_HEAD_@

<!-- [pragma safe_data] -->

[comment]
	These files are kept in lib/UI/pages/include so that
	there will be little chance of a parsing error.

		Include files: lib/UI/pages/include/*_editor

	They can be relocated to a catalog-specific place
	by copying to CATROOT/include.
[/comment]
[if cgi ui_type eq component]
	[include include/component_editor]
[elsif cgi ui_type eq template]
	[include include/template_editor]
[/elsif]
[else]
	[include include/page_editor]
[/else]
[/if]

@_UI_STD_FOOTER_@



1.1                  interchange/dist/lib/UI/pages/admin/content_preview.html


rev 1.1, prev_rev 1.0
Index: content_preview.html
===================================================================
[tmp tmp_junk][content-modify][/tmp][include file="[scratchd tmp_tmpfile]"]



1.1                  interchange/dist/lib/UI/pages/admin/content_publish.html


rev 1.1, prev_rev 1.0
Index: content_publish.html
===================================================================
[set page_perm]page[/set]
[set page_title][L]Content publisher[/L][/set]
[set ui_class]Content[/set]
[set help_name]content.editor[/set]
[set icon_name]icon_pages.gif[/set]
@_UI_STD_HEAD_@

<!-- ----- BEGIN REAL STUFF ----- -->

[perl tables="__UI_COMPONENT_TABLE__ __UI_TEMPLATE_TABLE__ __UI_PAGE_TABLE__ __UI_META_TABLE__"]
	my $tab;
	my $dir;

	my $op = delete $CGI->{ui_content_op};

	if($CGI->{ui_type} eq 'component') {
		$tab = q{__UI_COMPONENT_TABLE__};
		$dir = q{__UI_COMPONENT_DIR__};
	}
	elsif($CGI->{ui_type} eq 'component') {
		$tab = q{__UI_TEMPLATE_TABLE__};
		$dir = q{__UI_TEMPLATE_DIR__};
	}
	elsif($CGI->{ui_type} eq 'component') {
		$tab = q{__UI_PAGE_TABLE__};
		$dir = q{__UI_PAGE_DIR__};
	}
	my $db = $Db{$tab};
	my @existing;

	my $dest = $CGI->{ui_destination};
	$dest =~ s/^\s+//;
	$dest =~ s/\s+$//;
	
	if(! $dest) {
		## Publishing to same place, do nothing
	}
	elsif($dest =~ /::/ and $db) {
		my $sqdest = $Tag->filter('sql', $dest);
		my $q = "select * from $tab where base_code = '$sqdest'";
		@existing = $db->query( { hashref => 1, sql => $q });
	}
	else {
		@existing = glob("$dir/$dest*");
	}

	if(! $db and ! @existing) {
		$CGI->{ui_content_op} = $op;
		return;
	}
[/perl]

[if cgi ui_content_op]
	[if type=explicit compare="[content-modify]"]
		[warnings message="Published [cgi ui_type] [cgi ui_name]."]
	[/if]
	[bounce page=__UI_BASE__/content]
[/if]


<!-- ----- END REAL STUFF ----- -->

@_UI_STD_FOOTER_@
<!-- page: @@MV_PAGE@@ -->



1.1                  interchange/dist/lib/UI/pages/include/component_editor


rev 1.1, prev_rev 1.0
Index: component_editor
===================================================================
[content-editor name="[cgi ui_name]" type="[cgi ui_type]"]
[components]

<script language=JavaScript>
function changed (code, field) {
	var name = "changed_" + code;
	cbox = document.getElementById(name);
	cbox.checked = true;
}

function submitted (code) {
	var name = "changed_" + code;
	cbox = document.getElementById(name);
	cbox.checked = false;
	return true;
}

function change_alert (code) {
	if(code.length == 0) {
		code = 'a new component';
	}
	var status;
	status = confirm('You have changed ' + code + ". Choosing OK will lose these changes. Are you sure?");
	return status;
}

function check_change () {
	var el;
	el = document.getElementById('changed_ui_body');
	if(el != undefined && el.checked == true) {
		return change_alert('the component body');
	}
	[comp-list]
	el = document.getElementById('changed_[comp-code]');
	if(el != undefined && el.checked == true) {
		return change_alert('[comp-code]');
	}
	[/comp-list]
	return true;
}

var visdone = new Array;
function visible (index, base) {
	var ai;
	var xi;
	var dosel;
	var selstd = 'dynform';
	var clickstd = 'clicker';

	if(base == undefined || base.length == 0) {
		selbase = selstd;
		clickbase = clickstd;
	}
	else {
		selbase   = base + '_' + selstd;
		clickbase = base + '_' + clickstd;
		var found = 0;
		for(ai = 0; ai < visdone.length; ai++) {
			if (visdone[ai].value == base) {
				found = 1;
				break;
			}
		}
		if(found != 1) 
			visdone[ai] = base;
	}

	selnam =  selbase + index;
	clicknam = clickbase + index;

	for(ai = 0; ai < visdone.length; ai++) {
		sb = visdone[ai] + '_' + selstd;
		cb = visdone[ai] + '_' + clickstd;
		for( xi = 0; ; xi++) {
			nam = sb + xi;
			cnam = cb + xi;
			var el = document.getElementById(nam);

			if(el == undefined) {
				break;
			}

			el.style.zIndex = 0;
			el.style.visibility = 'Hidden';

			var cel = document.getElementById(cnam);

			if(cel != undefined) {
				cel.style.background = '#FFFFFF';
			}
		}
	}

	for( xi = 0; ; xi++) {
		nam = selstd + xi;
		cnam = clickstd + xi;
		var el = document.getElementById(nam);

		if(el == undefined) {
			break;
		}

		el.style.zIndex = 0;
		el.style.visibility = 'Hidden';

		var cel = document.getElementById(cnam);

		if(cel != undefined) {
			cel.style.background = '#FFFFFF';
		}
	}

	if (index < 0) return;

	var element = document.getElementById(selnam);
	var celement = document.getElementById(clicknam);
	element.style.visibility = 'Visible';
	element.style.zIndex = 2;
	if(celement != undefined) {
		celement.style.background = '#EEEEEE';
	}

	return;
}

</script>

[if type=explicit compare="[error all=1 show_var=1 keep=1]"]
<B>There were errors:<br>
<blockquote>
<FONT color="__CONTRAST__">
	[error all=1 keep=1 show_error=1 show_label=1 joiner="<br>"]
</font>
</blockquote>
[/if]

<form name=overall action="[area @@MV_PAGE@@]" method=POST>
<input type=hidden name="mv_content_op" value="modify_param">
<table>
<tr>
<td valign=top>

[on-match]
<h3>Component Attributes</h3>
<div align=right>
	Description: <input type=text size=30 value="[comp-param ui_label]"><BR>
	Classes:  <input type=text size=30 value="[comp-param ui_class]"><BR>
	Groups:  <input type=text size=30 value="[comp-param ui_group]"><br>
	<input type=submit value="Save" onClick="return check_change()">
</div>
<hr>
[/on-match]

<div id=clicker0 style="border: 1; border-style: thin">
	<h3>Component HTML</h3>
	Action:
		<A NAME=clicker0
			HREF="javascript:void(0)"
			onClick="visible(0)"
		>edit body</A>
		<br>
	<INPUT TYPE=checkbox VALUE=1 NAME=changed_ui_body id=changed_ui_body> changed
</div>
<hr>
<h3>Component Controls</h3>
[comp-list]
<div id=clicker[comp-increment] style="border: 1; border-style: thin">
[if-comp-param code]
Name: <A HREF="javascript:void(0)" NAME=clicker[comp-increment] onClick="visible([comp-increment])">[comp-param code]</A><BR>
Label: [comp-param label]<br>
Widget: [comp-param type]<br>
Action: 
<A HREF="[area
		href="@@MV_PAGE@@"
		form=auto
		code="[comp-param code]"
		ui_content_op=delete
		ui_name="[comp-parent name]"
		ui_type=component
]" onClick="return check_change()">delete</A>&nbsp;&nbsp;
<A HREF="[area
		href="@@MV_PAGE@@"
		form=auto
		ce_motion=up
		code="[comp-param code]"
		ui_content_op=motion
		ui_name="[comp-parent name]"
		ui_type=component
]" onClick="return check_change()">up</A>&nbsp;&nbsp;
<A HREF="[area
		href="@@MV_PAGE@@"
		form=auto
		ce_motion=down
		code="[comp-param code]"
		ui_content_op=motion
		ui_name="[comp-parent name]"
		ui_type=component
]" onClick="return check_change()">down</A><BR>
<INPUT TYPE=checkbox VALUE=1 NAME="changed_[comp-param code]" id="changed_[comp-param code]"> changed
[else]
<A HREF="javascript:void(0)" NAME=clicker[comp-increment] onClick="visible([comp-increment])">Add a new control</A><BR>
[/else]
[/if-comp-param]
</div>
<p>
[/comp-list]
[on-match]
[set Publish]
ui_content_op=publish
mv_nextpage=__UI_BASE__/content_publish
[/set]
[set Cancel]
ui_content_op=cancel
mv_nextpage=__UI_BASE__/content
[/set]
<input type=hidden name=ui_name value="[comp-param ui_name]">
<input type=hidden name=ui_type value="[comp-param ui_type]">
<input type=hidden name=ui_source value="[comp-param ui_source]">
<input type=hidden name=mv_action value="return">
<input style="font-weight: bold" type=submit onClick="return check_change()" name=mv_click value="[L]Publish[/L]"> &nbsp;
<input type=submit onClick="return check_change()" name=mv_click value="[L]Cancel[/L]"><br>
New name: <input type=text name=ui_destination size=22 value="">
</form>
</td>
<td>
<div
    style="
            Position:Relative;
            Left:0; Top:0; Height:100%; Width:100%;
            Visibility:Visible;
            z-index:1;
	">
	<div
		id=dynform0
		style="
				Position:Absolute; 
				Left:2; Top:2; Height:100%; Width:100%;
				Visibility:Visible;
				z-index:2;
			">
[set c_content][comp-param ui_body][/set]

[table-editor
		action=return
		hidden.ui_content_op=modify_body
		hidden.ui_name=[comp-param ui_name]
		hidden.ui_type=[comp-param ui_type]
		item_id=ui_body
		href=silent/ce_modify
		show_reset=1
		nocancel=1
		form-extra=|
			onSubmit="submitted('ui_body')"
			onReset="submitted('ui_body')"
		|
		js_changed=changed
		override.ui_body_text=`$Scratch->{c_content}`
		table=mv_metadata
		ui_data_fields="ui_body_text"
		ui_display_only="ui_body_text"
		ui_hide_key=1
		view=ui_component
		]
[/on-match]
</div>
[comp-list]
	<div
		id=dynform[comp-increment]
		style="
				Position:Absolute;
				Left:2; Top:2; Width:98%; Height: 98%;
				Visibility: [comp-change 1][condition]1[/condition]Visible[else]Hidden[/else][/comp-change 1]
				z-index:0;
		">
	[comp-param _editor_table]
	</div>
[/comp-list]
</div>
<script>
	visible(0);
</script>
</td>
</tr>
</table>
[/components]
[/content-editor]



1.1                  interchange/dist/lib/UI/pages/include/page_editor


rev 1.1, prev_rev 1.0
Index: page_editor
===================================================================
[content-editor name="[cgi ui_name]" type="[cgi ui_type]"]
[pages]

<script language=JavaScript>
function changed (code, field) {
	var name = "changed_" + code;
	cbox = document.getElementById(name);
	if(cbox != undefined)
		cbox.checked = true;
}

function submitted (code) {
	var name = "changed_" + code;
	cbox = document.getElementById(name);
	if(cbox != undefined)
		cbox.checked = false;
	return true;
}

function change_alert (code) {
	if(code.length == 0) {
		code = 'a new component';
	}
	var status;
	status = confirm('You have changed ' + code + ". Choosing OK will lose these changes. Are you sure?");
	return status;
}

function check_change () {
	var el;
	el = document.getElementById('changed_[page-param ui_name]');
	if(el != undefined && el.checked == true) {
		return change_alert('the page controls');
	}
[components]
	[if-comp-param code]
	el = document.getElementById('changed_[comp-param code]');
	if(el != undefined && el.checked == true) {
		return change_alert('[comp-param code]');
	}
	[else]
	el = document.getElementById('changed_CONTENT');
	if(el != undefined && el.checked == true) {
		return change_alert('the page content');
	}
	[/else]
	[/if-comp-param]
[/components]
	el = document.getElementById('[page-param ui_name]');
	if(el != undefined && el.checked == true) {
		return change_alert('the page controls');
	}
	el = document.getElementById('changed_PREAMBLE');
	if(el != undefined && el.checked == true) {
		return change_alert('the PREAMBLE');
	}
	el = document.getElementById('changed_POSTAMBLE');
	if(el != undefined && el.checked == true) {
		return change_alert('the POSTAMBLE');
	}
	return true;
}

function layback (nam) {
	var el = document.getElementById(nam);

	if(el != undefined) {
		el.style.background = '#CCCCCC';
		el.style.borderStyle = 'dotted';
		el.style.borderWidth = 'thin';
	}
}

function standout (nam) {
	var el = document.getElementById(nam);

	if(el != undefined) {
		el.style.background = '#EEEEEE';
		el.style.borderStyle = 'solid';
		el.style.borderWidth = 'thin';
	}
}

var visdone = new Array;
function visible (index, base) {
	var ai;
	var xi;
	var dosel;
	var selstd = 'dynform';
	var clickstd = 'clicker';
	var picstd = 'picture';

	if(base == undefined || base.length == 0) {
		selbase = selstd;
		clickbase = clickstd;
		picbase = picstd;
	}
	else {
		selbase   = base + '_' + selstd;
		clickbase = base + '_' + clickstd;
		picbase = base + '_' + picstd;
		var found = 0;
		for(ai = 0; ai < visdone.length; ai++) {
			if (visdone[ai].value == base) {
				found = 1;
				break;
			}
		}
		if(found != 1) 
			visdone[ai] = base;
	}

	selnam =  selbase + index;
	clicknam = clickbase + index;
	picnam = picbase + index;

	for(ai = 0; ai < visdone.length; ai++) {
		sb = visdone[ai] + '_' + selstd;
		cb = visdone[ai] + '_' + clickstd;
		pb = visdone[ai] + '_' + picstd;
		for( xi = 0; ; xi++) {
			nam = sb + xi;
			cnam = cb + xi;
			pnam = pb + xi;
			var el = document.getElementById(nam);

			if(el == undefined) {
				break;
			}

			el.style.zIndex = 0;
			el.style.visibility = 'Hidden';

			layback(cnam);
			layback(pnam);
		}
	}

	for( xi = 0; ; xi++) {
		nam = selstd + xi;
		cnam = clickstd + xi;
		pnam = picstd + xi;
		var el = document.getElementById(nam);

		if(el == undefined) {
			break;
		}

		el.style.zIndex = 0;
		el.style.visibility = 'Hidden';

		layback(pnam);
		layback(cnam);
	}

	if (index < 0) return;

	var element = document.getElementById(selnam);
	element.style.visibility = 'Visible';
	element.style.zIndex = 2;
	standout(clicknam);
	standout(picnam);

	return;
}

</script>

<table width="98%" cellspacing=0 cellpadding=0>
<tr>
	<td colspan=2>
	<form name=overall action="[area @@MV_PAGE@@]" method=POST>
	<input type=hidden name=ui_content_op value="modify">
	<input type=hidden name=ui_name value="[page-param ui_name]">
	<input type=hidden name=ui_type value="[page-param ui_type]">
	<input type=hidden name=mv_action value="back">
		<table width="100%" cellpadding=0 cellspacing=0 cellmargin=3>
		<tr>
			<td id=clicker>
	<h3>Page Attributes/Controls</h3>
			Name: <b>[page-param ui_name]</b><BR>
			Source: [page-param ui_source]
		[page-sub foo_sub]
			shift;
			my $item = shift;
			## Set up access to the controls
			for(keys %$item) {
				$control{$_} = $item->{$_};
			}
			return;
		[/page-sub]
		[page-exec foo_sub][/page-exec]
			</td>
			<td align=right>
			Template: [display
							name=ui_page_template
							type=select
							default="[page-param ui_page_template]"
							passed="[content-info templates=1]"
							]<br>

[set Publish]
ui_content_op=publish
mv_nextpage=__UI_BASE__/content
[/set]
[set Cancel]
ui_content_op=cancel
mv_nextpage=__UI_BASE__/content
[/set]
[set Preview]
ui_content_op=preview
mv_nextpage=__UI_BASE__/content_preview
[/set]
<input
	style="font-weight: bold"
	type=submit onClick="return check_change()"
	name=mv_click
	value="[L]Publish[/L]"
> &nbsp;
<input
	type=submit
	onClick="return confirm(
			'This will destroy all edits you have made to this page '
			+ 'since the last Publish operation.\n Are you sure?'
		)"
	name=mv_click
	value="[L]Cancel[/L]"
> &nbsp;
<input
	type=submit
	onClick="return check_change()"
	name=mv_click
	value="[L]Preview[/L]"
> &nbsp;
<input
	type=submit
	onClick="return confirm(
			'This may delete components from your configuration.' +
			'Continue?'
		)"
	value="Change template"

			</td>
			<td id=clicker1>
	Page controls
	<input type=checkbox
			name="changed_[page-param ui_name]"
			id="changed_[page-param ui_name]"
			value=1><br>
[loop list="[page-param ui_display_order]"]
	<A
		style="font-size: larger; font-weight: bolder"
		HREF="javascript:void(0)"
		onClick="visible(1)"
		title="edit page controls"
	>[loop-code]</A><br>
[/loop]

			</td>
		</tr>
		</table>
	</form>
	</td>
</tr>
<tr>
	<td width="20%" align=right valign=top>
<br>
<div id=clicker0
	 style="
	 	padding: 1px;
		width: 82%;
		border-style: solid;
		border-width: thin;
	 ">
		<A
			href="javascript:void(0)"
			title="edit page preamble"
			onClick="visible(0)"
		>PREAMBLE</A>&nbsp;<input
			type=checkbox
			name=changed_PREAMBLE
			id=changed_PREAMBLE
			value=1>
</div>
[components]
	[comp-sub tmp_slot]
		return ++$slot;
	[/comp-sub]
<div id="comp_clicker[comp-increment]"
	 style="
	 	padding: 1px;
		width: 90%;
		border-style: solid;
		border-width: thin;
	 ">
	[if-comp-param where]
		<A
			HREF="javascript:void(0)"
			TITLE="edit [comp-param component]"
			STYLE="font-size: larger; font-weight: bolder"
			onClick="visible([comp-increment],'comp')"
		>[if-comp-param component][comp-param component][else]-empty-[/else][/if-comp-param]</A>&nbsp;<input
				type=checkbox
				name=changed_slot[comp-increment]
				id=changed_slot[comp-increment]
				value=1>
	[else]
	 <A	HREF="javascript:void(0)"
			style="font-size: larger; font-weight: bolder"
			onClick="visible([comp-increment],'comp')"
			title="edit page content"
		>CONTENT</A>&nbsp;<input
			type=checkbox
			name=changed_CONTENT
			id=changed_CONTENT
			value=1>
	[/else]
	[/if-comp-param]
</div>
[/components]
<div id=clicker2
	 style="
	 	padding: 1px;
		width: 82%;
		border-style: solid;
		border-width: thin;
	 ">
		<A
			href="javascript:void(0)"
			title="edit page postamble"
			onClick="visible(2)"
		>POSTAMBLE</A>&nbsp;<input
			type=checkbox
			name=changed_POSTAMBLE
			id=changed_POSTAMBLE
			value=1>
	
</div>
[if-page-param ui_page_image]
<IMG SRC="[page_param ui_page_image]">
[/if-page-param]
[page-param ui_page_picture]

</td>
<td width="80%" align=center valign=center>
<div
    style="
            Position:Relative;
            Left:0; Top:0; Height:100%; Width:100%;
            Visibility:Visible;
            z-index:1;
	">
	<div 
		id=comp_dynform0
		style="
				border-style: inset;
				border-width: thin;
				Position:Absolute;
				Left:0; Top:0; Height:100%; Width:100%;
				Visibility:Visible;
				z-index:0;
				background: #EEEEEE;
		">
		<blockquote>
		<h2>Edit area</H2>
		When you select an element to the left, it will be edited here.
		</blockquote>
	</div>
[components]
	<div
		id="comp_dynform[comp-increment]"
		style="
				border-style: inset;
				border-width: thin;
				Position:Absolute; 
				Left:0; Top:0; Height:100%; Width:100%;
				Visibility: Hidden;
				z-index:0;
				background: #EEEEEE;
			">
	[if-comp-param where]
	[comp-param _editor_table]
	<p>
	<div
		align=left
		valign=bottom
		border=1
		style="
				border-style: inset;
				border-width: thin;
				padding: .25in;
				text-align: left;
				margin: 1in;
				font-size: larger;
				background: #DDDDDD;
			"
	>
	[if-comp-param component]
	<b>Name</b>: <A HREF="[area
						href=@@MV_PAGE@@
						form=auto
						ui_type=component
						ui_name=[comp-param component]
					]" TARGET="_blank">[comp-param component] - [content-info code="[comp-param component]" label=1]</a><br>
	[else]
		<B>No component here</B><br>
	[/else]
	[/if-comp-param]
	<b>Class</b>: [comp-param class]<br>
	<b>Where</b>: <A HREF="[area
						href=@@MV_PAGE@@
						form=auto
						ui_type=template
						ui_name=[page-param ui_page_template]
					]" TARGET="_blank">[comp-param where]</A><br>
	<b>Slot</b>: [comp-increment]<br>
	</div>
	[else]

[page-calc]
	$page_content = <<'EoPA';
[page-param CONTENT]
EoPA
	$page_preamble = <<'EoPB';
[page-param PREAMBLE]
EoPB
	$page_postamble = <<'EoPC';
[page-param POSTAMBLE]
EoPC
	for(\$page_content, \$page_preamble, \$page_postamble) {
		chop $$_;
	}
	return;
[/page-calc]

		[table-editor
			action=return
			height.ui_body_text="38"
			width.ui_body_text="100%"
			hidden.ui_content_op=modify_body
			hidden.ui_name="[page-param ui_name]"
			hidden.ui_type="[page-param ui_type]"
			href="silent/ce_modify"
			item_id="CONTENT"
			js_changed=changed
			label.ui_body_text="&nbsp;&nbsp;&nbsp;Page&nbsp;content"
			mv_nextpage=@@MV_PAGE@@
			nocancel=1
			notable=1
			no_meta=1
			override.ui_body_text=`$page_content`
			show_reset=1
			table=junk
			table_width="100%"
			ui_data_fields="code ui_body_text"
			ui_hide_key=1
			widget.ui_body_text="textarea"
			view=ui_component
			form-extra=|
				onSubmit="submitted('[comp-param where]'); return check_change()"
				onReset="submitted('[comp-param where]')"
			|
		]
	[/else]
	[/if-comp-param]
	</div>
[/components]
	<div
		id=dynform0
		style="
				border-style: inset;
				border-width: thin;
				Position:Absolute;
				Left:0; Top:0; Width:100%; Height: 100%;
				Visibility: Hidden;
				z-index:0;
				background: #EEEEEE;
		">
		[table-editor
			action=return
			height.ui_body_text="10"
			width.ui_body_text="100%"
			hidden.ui_content_op=modify_body
			hidden.ui_name="[page-param ui_name]"
			hidden.ui_type="[page-param ui_type]"
			href="silent/ce_modify"
			item_id="PREAMBLE"
			js_changed=changed
			label.ui_body_text="&nbsp;&nbsp;&nbsp;Preamble"
			mv_nextpage=@@MV_PAGE@@
			nocancel=1
			notable=1
			no_meta=1
			override.ui_body_text=`$page_preamble`
			show_reset=1
			table=junk
			table_width="100%"
			ui_data_fields="code ui_body_text"
			ui_hide_key=1
			widget.ui_body_text="textarea"
			view=ui_component
			form-extra=|
				onSubmit="submitted('PREAMBLE'); return check_change()"
				onReset="submitted('PREAMBLE')"
			|
		]
		<div
			align=left
			valign=bottom
			border=1
			style="
					border-style: inset;
					border-width: thin;
					padding: .25in;
					text-align: left;
					margin: 1in;
					font-size: larger;
					background: #DDDDDD;
				"
		>
		<b>Name</b>: Page preamble<br>
		<b>Slot</b>: N/A (precedes all slots and control settings)<br>
		</div>
	</div>
	<div
		id=dynform1
		style="
				border-style: inset;
				border-width: thin;
				Position:Absolute;
				Left:0; Top:0; Width:100%; Height: 100%;
				Visibility: Hidden;
				z-index:0;
				background: #EEEEEE;
		">
		[page-param _editor_table]
		<div
			align=left
			valign=bottom
			border=1
			style="
					border-style: inset;
					border-width: thin;
					padding: .25in;
					text-align: left;
					margin: 1in;
					font-size: larger;
					background: #DDDDDD;
				"
		>
		<b>Name</b>: Page controls<br>
		<b>Slot</b>: N/A (precedes all except preamble)<br>
		</div>
	</div>
	<div
		id=dynform2
		style="
				border-style: inset;
				border-width: thin;
				Position:Absolute;
				Left:0; Top:0; Width:100%; Height: 100%;
				Visibility: Hidden;
				z-index:0;
				background: #EEEEEE;
		">
		[table-editor
			action=return
			height.ui_body_text="10"
			width.ui_body_text="100%"
			hidden.ui_content_op=modify_body
			hidden.ui_name="[page-param ui_name]"
			hidden.ui_type="[page-param ui_type]"
			href="silent/ce_modify"
			item_id="POSTAMBLE"
			js_changed=changed
			label.ui_body_text="&nbsp;&nbsp;&nbsp;Postamble"
			mv_nextpage=@@MV_PAGE@@
			nocancel=1
			notable=1
			no_meta=1
			override.ui_body_text=`$page_postamble`
			show_reset=1
			table=junk
			table_width="100%"
			ui_data_fields="code ui_body_text"
			ui_hide_key=1
			widget.ui_body_text="textarea"
			view=ui_component
			form-extra=|
				onSubmit="submitted('POSTAMBLE'); return check_change()"
				onReset="submitted('POSTAMBLE')"
			|
		]
		<div
			align=left
			valign=bottom
			border=1
			style="
					border-style: inset;
					border-width: thin;
					padding: .25in;
					text-align: left;
					margin: 1in;
					font-size: larger;
					background: #DDDDDD;
				"
		>
		<b>Name</b>: Page postamble<br>
		<b>Slot</b>: N/A (after all slots and control settings)<br>
		</div>
	</div>
</div>
[components]
[if cgi ui_content_pos]
	<script>
		visible([calc]
					$CGI->{ui_content_pos} + 1
				[/calc], 'comp')
	</script>
[else]
	[if-comp-param !code]
	<script>
		visible([comp-increment], 'comp');
	</script>
	[/if-comp-param]
[/else]
[/if]
[/components]
</td>
</tr>
</table>
[/pages]
[/content-editor]
[comment]
<xmp>
[dump content_edit]
</xmp>
[/comment]



1.1                  interchange/dist/lib/UI/pages/include/template_editor


rev 1.1, prev_rev 1.0
Index: template_editor
===================================================================
[content-editor name="[cgi ui_name]" type="[cgi ui_type]"]
[templates]

<script language=JavaScript>
function changed (code, field) {
	var name = "changed_" + code;
	cbox = document.getElementById(name);
	cbox.checked = true;
}

function submitted (code) {
	var name = "changed_" + code;
	cbox = document.getElementById(name);
	cbox.checked = false;
	return true;
}

function change_alert (code) {
	if(code.length == 0) {
		code = 'a new component';
	}
	var status;
	status = confirm('You have changed ' + code + ". Choosing OK will lose these changes. Are you sure?");
	return status;
}

function check_change () {
	var el;
	el = document.getElementById('changed_ui_body');
	if(el != undefined && el.checked == true) {
		return change_alert('the component body');
	}
	[controls]
	el = document.getElementById('changed_[cont-code]');
	if(el != undefined && el.checked == true) {
		return change_alert('[cont-code]');
	}
	[/controls]
	[components]
		[comp-change 1][condition][comp-param where][/condition]
			[if-comp-param code]
			el = document.getElementById('changed_[comp-param where]');
			if(el != undefined && el.checked == true) {
				return change_alert('[comp-param where]');
			}
			[/if-comp-param]
		[/comp-change 1]
	[/components]
	return true;
}

var visdone = new Array;
function visible (index, base) {
	var ai;
	var xi;
	var dosel;
	var selstd = 'dynform';
	var clickstd = 'clicker';

	if(base == undefined || base.length == 0) {
		selbase = selstd;
		clickbase = clickstd;
	}
	else {
		selbase   = base + '_' + selstd;
		clickbase = base + '_' + clickstd;
		var found = 0;
		for(ai = 0; ai < visdone.length; ai++) {
			if (visdone[ai].value == base) {
				found = 1;
				break;
			}
		}
		if(found != 1) 
			visdone[ai] = base;
	}

	selnam =  selbase + index;
	clicknam = clickbase + index;

	for(ai = 0; ai < visdone.length; ai++) {
		sb = visdone[ai] + '_' + selstd;
		cb = visdone[ai] + '_' + clickstd;
		for( xi = 0; ; xi++) {
			nam = sb + xi;
			cnam = cb + xi;
			var el = document.getElementById(nam);

			if(el == undefined) {
				break;
			}

			el.style.zIndex = 0;
			el.style.visibility = 'Hidden';

			var cel = document.getElementById(cnam);

			if(cel != undefined) {
				cel.style.background = '#FFFFFF';
			}
		}
	}

	for( xi = 0; ; xi++) {
		nam = selstd + xi;
		cnam = clickstd + xi;
		var el = document.getElementById(nam);

		if(el == undefined) {
			break;
		}

		el.style.zIndex = 0;
		el.style.visibility = 'Hidden';

		var cel = document.getElementById(cnam);

		if(cel != undefined) {
			cel.style.background = '#FFFFFF';
		}
	}

	if (index < 0) return;

	var element = document.getElementById(selnam);
	var celement = document.getElementById(clicknam);
	element.style.visibility = 'Visible';
	element.style.zIndex = 2;
	if(celement != undefined) {
		celement.style.background = '#EEEEEE';
	}

	return;
}

</script>

<table>
<tr>
<td valign=top>
<form name=overall action="[area @@MV_PAGE@@]" method=POST>

<h3>Template Attributes</h3>
<div align=right>
	Description: <input type=text size=30 value="[tem-param ui_label]"><BR>
</div>
<hr>
<h3>Template Controls</h3>
[controls]
<div id=clicker[cont-increment] style="border: 1; border-style: thin">
[if-cont-param code]
Name: <A
		HREF="javascript:void(0)"
		NAME=clicker[cont-increment]
		onClick="visible([cont-increment])"
		title="edit [cont-param code]"
		><span
			style="font-size: larger; font-weight: bolder"
			>[cont-param code]</span></A><BR>
Label: [cont-param label]<br>
Widget: [cont-param type]<br>
Action: 
<A HREF="[area
		href="@@MV_PAGE@@"
		form=auto
		code="[cont-param code]"
		ui_content_op=delete
		ui_name="[cont-parent ui_name]"
		ui_type="[cont-parent ui_type]"
]" onClick="return check_change()">delete</A>&nbsp;&nbsp;
<A HREF="[area
		href="@@MV_PAGE@@"
		form=auto
		ce_motion=up
		code="[cont-param code]"
		ui_content_op=motion
		ui_name="[cont-parent ui_name]"
		ui_type="[cont-parent ui_type]"
]" onClick="return check_change()">up</A>&nbsp;&nbsp;
<A HREF="[area
		href="@@MV_PAGE@@"
		form=auto
		ce_motion=down
		code="[cont-param code]"
		ui_content_op=motion
		ui_name="[cont-parent ui_name]"
		ui_type="[cont-parent ui_type]"
]" onClick="return check_change()">down</A><BR>
[else]
	<A HREF="javascript:void(0)"
		NAME=clicker[cont-increment]
		onClick="visible([cont-increment])">Add a new control</A><BR>
[/else]
[/if-cont-param]
<INPUT TYPE=checkbox VALUE=1 NAME="changed_[cont-param code]" id="changed_[cont-param code]"> changed
</div>
<p>
[/controls]

<table border=1 borderstyle=thin>
<tr>
	<td>
	<b>Page layout</b>
[components]
[comp-sub tmp_slot]
	return ++$slot;
[/comp-sub]
[if-comp-param where]
[comp-change 1][condition][comp-param where][/condition]
	</td>
</tr>
<tr>
<td id="comp_clicker[comp-increment]">
	Template area
	<A	HREF="javascript:void(0)"
		onClick="visible([comp-increment],'comp')"
		title="edit [comp-param where]"
	><span
		style="font-size: larger; font-weight: bolder"
		>[comp-param where]</span></A><br>
	<INPUT	TYPE=checkbox
			VALUE=1
			NAME="changed_[comp-param where]"
			id="changed_[comp-param where]"
	>&nbsp;changed<br>
[/comp-change 1]
 [if-comp-param code]
 Slot [comp-exec tmp_slot][/comp-exec]:
	class=[comp-param class],
	default=[content-info label=1 code="[comp-code]"] ([comp-code])<br>
 [/if-comp-param]
[else]
	</td>
</tr>
<tr>
	<td>
Page content<BR>
[/else]
[/if-comp-param]
</div>
[/components]
	</td>
</tr>
</table>

[set Publish]
ui_content_op=publish
mv_nextpage=__UI_BASE__/content
[/set]
[set Cancel]
ui_content_op=cancel
mv_nextpage=__UI_BASE__/content
[/set]
<input type=hidden name=ui_name value="[tem-param ui_name]">
<input type=hidden name=ui_type value="[tem-param ui_type]">
<input type=hidden name=mv_action value="return">
<input style="font-weight: bold" type=submit onClick="return check_change()" name=mv_click value="[L]Publish[/L]"> &nbsp;
<input type=submit onClick="return check_change()" name=mv_click value="[L]Cancel[/L]"><br>
New name: <input type=text name=ui_destination size=22 value="">
</form>
</td>
<td>
<div
    style="
            Position:Relative;
            Left:0; Top:0; Height:100%; Width:100%;
            Visibility:Visible;
            z-index:1;
	">
	<div 
		id=dynform0
		style="
				Position:Absolute;
				Left:0; Top:0; Height:100%; Width:100%;
				Visibility:Visible;
				z-index:2;
		">
		<blockquote>
		<h2>Edit area</H2>
		When you select an element to the left, it will be edited here.
		</blockquote>
	</div>
	<div 
		id=comp_dynform0
		style="
				Position:Absolute;
				Left:0; Top:0; Height:100%; Width:100%;
				Visibility:Visible;
				z-index:0;
		">
		<blockquote>
		<h2>Edit area</H2>
		When you select an element to the left, it will be edited here.
		</blockquote>
	</div>
[components]
	<div
		id="comp_dynform[comp-increment]"
		style="
				Position:Absolute; 
				Left:0; Top:0; Height:100%; Width:100%;
				Visibility: Hidden;
				z-index:0;
			">
	[comp-change 1][condition][comp-param where][/condition]
		[if-comp-param where]
		[set c_content][comp-parent [comp-param where]][/set]
			[table-editor
				form-extra=|
					onSubmit="submitted('[comp-param where]'); return check_change()"
					onReset="submitted('[comp-param where]')"
				|
				action=back
				height.ui_body_text="40"
				href="[area @@MV_PAGE@@]"
				hidden.ui_content_op=modify_body
				hidden.ui_name=[comp-parent ui_name]
				hidden.ui_type=[comp-parent ui_type]
				hidden.visible=[comp-increment]
				hidden.visible_mod=comp
				item_id="[comp-param where]"
				js_changed=changed
				label.ui_body_text="[comp-param where] body"
				ui_nextpage=@@MV_PAGE@@
				nocancel=1
				override.ui_body_text=`$Scratch->{c_content}`
				show_reset=1
				table=mv_metadata
				ui_data_fields="code ui_body_text"
				ui_display_only="ui_body_text"
				ui_hide_key=1
				view=ui_component
				]
		[/if-comp-param]
	[/comp-change 1]
	</div>
[/components]
[controls]
	<div
		id=dynform[cont-increment]
		style="
				Position:Absolute;
				Left:0; Top:0; Width:98%; Height: 98%;
				Visibility: Hidden;
				z-index:0;
		">
	[cont-param _editor_table]
	</div>
[/controls]
</div>
<script>
	visible([either][cgi visible][or] 0 [/either],'[cgi visible_mod]');
</script>
</td>
</tr>
</table>
[/templates]
[/content-editor]



2.13      +3 -1      interchange/dist/lib/UI/vars/UI_STD_HEAD


rev 2.13, prev_rev 2.12
Index: UI_STD_HEAD
===================================================================
RCS file: /anon_cvs/repository/interchange/dist/lib/UI/vars/UI_STD_HEAD,v
retrieving revision 2.12
retrieving revision 2.13
diff -u -r2.12 -r2.13
--- UI_STD_HEAD	18 Jan 2002 18:24:31 -0000	2.12
+++ UI_STD_HEAD	16 Feb 2002 09:39:11 -0000	2.13
@@ -339,11 +339,12 @@
           <br>
 		[if scratch icon_name]<img src="[scratch icon_name]" width=16 height=16 border=0 valign=top alt=icon> &nbsp; [/if]
 	   <font size="+1" face="Verdana,arial,helvetica,sans-serif" color="__UI_C_HEADERTXT__">[either][scratch page_banner][or][scratch page_title][/either]&nbsp;</font><p>
+
     [if type=explicit compare="[error all=1 show_var=1 keep=1]"]
 	<P>
 	<B>Error:</B>
 	<BLOCKQUOTE class=cerror>
-		[error all=1 show_error=1 joiner="<br>"]
+		[error show_var=1 all=1 show_error=1 joiner="<br>"]
 	</BLOCKQUOTE>
 	</P>
 	[/if]
@@ -361,6 +362,7 @@
 	</BLOCKQUOTE>
 	</P>
 	[/if]
+	[warnings auto=1]
 [/if]
 [comment] Clear these puppies [/comment]
 [calc]



2.24      +14 -3     interchange/scripts/interchange.PL


rev 2.24, prev_rev 2.23
Index: interchange.PL
===================================================================
RCS file: /anon_cvs/repository/interchange/scripts/interchange.PL,v
retrieving revision 2.23
retrieving revision 2.24
diff -u -r2.23 -r2.24
--- interchange.PL	7 Feb 2002 02:15:21 -0000	2.23
+++ interchange.PL	16 Feb 2002 09:39:11 -0000	2.24
@@ -50,7 +50,7 @@
 #
 # Interchange version 4.9.0
 #
-# $Id: interchange.PL,v 2.23 2002/02/07 02:15:21 mheins Exp $
+# $Id: interchange.PL,v 2.24 2002/02/16 09:39:11 mheins Exp $
 #
 # Copyright (C) 1996-2001 Red Hat, Inc. <interchange@redhat.com>
 #
@@ -1746,16 +1746,27 @@
 	ui_wrap => \&UI::Primitive::ui_wrap,
     ui=> sub { 
 					&UI::Primitive::ui_acl_global();
-					\&do_process(@_);
+					&do_process(@_);
 				   },
     minimate=> sub { 
 					&MiniMate::CfgMgr::mm_acl_global;
-					\&do_process(@_);
+					&do_process(@_);
 				   },
     scan	=> \&do_scan,
     search	=> \&do_search,
     order	=> \&do_order,
     obtain	=> \&do_order,
+    silent	=> sub {
+						$Vend::StatusLine = "Status: 204 No content";
+						my $extra_click = $Vend::FinalPath;
+						$extra_click =~ s:/:\0:g;
+						$CGI->{mv_click} =  $CGI->{mv_click}
+											? "$CGI->{mv_click}\0$extra_click"
+											:  $extra_click;
+						do_process(@_);
+						::respond('');
+						return 0;
+					},
 );
 
 sub dispatch {