[interchange-cvs] interchange - heins modified dist/lib/UI/pages/admin/meta_editor.html

interchange-cvs at icdevgroup.org interchange-cvs at icdevgroup.org
Thu Apr 8 23:30:29 EDT 2004


User:      heins
Date:      2004-04-09 03:30:29 GMT
Modified:  dist/lib/UI/pages/admin meta_editor.html
Log:
* Add extension to allow custom settings on a per-widget basis. Looks for
  a special metadata key _widget::$type to find the settings.

  The record in the mv_metadata table for a widget named "kupu"
  looks like:

	code:_widget::kupu
	extended: {
				_order => 'window_width window_height page_title show_debug',
					page_title => {
						help => 'Title for editor page',
						widget => 'text_60',
						label => 'Editor title text',
					},
					show_debug => {
						help => 'Show Kupu Debug window',
						label => 'Show Debug Window',
						widget => 'yesno',
					},
					window_height => {
						label => 'Editor Window Height',
						widget => 'text_4',
						help => 'In pixels',
					},
					window_width => {
						label => 'Editor Window Width',
						widget => 'text_4',
						help => 'In pixels',
					}
				}

    When these fields are found, the following gets added to ui_data_fields:

		=Special for kupu widget

		extended.window_width
		extended.window_height
		extended.page_title
		extended.show_debug

	The help, label, and widget values are added to the
	appropriate option hashes.

	Obviously you must select the widget type first, then on the
	*next* access to that you will see the new tab.

   These options are passed to the Form.pm or Widget code routine
   for the widget.

Revision  Changes    Path
2.11      +81 -39    interchange/dist/lib/UI/pages/admin/meta_editor.html


rev 2.11, prev_rev 2.10
Index: meta_editor.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/meta_editor.html,v
retrieving revision 2.10
retrieving revision 2.11
diff -u -r2.10 -r2.11
--- meta_editor.html	22 Feb 2004 19:28:37 -0000	2.10
+++ meta_editor.html	9 Apr 2004 03:30:29 -0000	2.11
@@ -68,35 +68,14 @@
 [flag type=write table="[cgi mv_data_table]"]
 
 [perl table="[cgi mv_data_table]"]
-	### If there is a view, set defaults from non-view record
-	### for this item
-	
-	# Always want this removed first, don't proceed if no view
-	$Tag->tmp('tmp_defaults');
-	return unless $CGI->{ui_meta_view};
-
-	my $db = $Db{$CGI->{mv_data_table}};
-
-	# Don't bother if already exists
-	return if $db->record_exists($CGI->{item_id});
-
-	my $id = $CGI->{item_id};
-	$id =~ s/^[^:]+:+//;
-	my $rec = $db->row_hash($id)
-		or return;
-	delete $rec->{code};
-	$Scratch->{tmp_defaults} = $rec;
-	return;
-[/perl]
 
-[table-editor
-	item_id="[cgi item_id]"
-	table="[cgi mv_data_table]"
-	no-table-meta=1
-	no-meta=1
-	start-at="[cgi start_at]"
-	default=`$Scratch->{tmp_defaults}`
-	ui_data_fields="
+	my $sneak_type = $Tag->data($CGI->{mv_data_table}, 'type', $CGI->{item_id});
+	my $extra_meta;
+	if($sneak_type) {
+		$extra_meta = $Tag->meta_record("_widget::$sneak_type", undef, undef, 1);
+	}
+	%me_opt = (
+	ui_data_fields => qq{
 		=Typical
 
 		code
@@ -152,19 +131,19 @@
 	   prepend
 	   append
 	   __UI_META_ADDITIONAL__
-	"
+	},
 
-	options=`{
+	options	=> {
 		'extended.ui_sort_option' => qq{=--default--,f=Case insensitive, fr=Case insensitive/Reverse, n=Numeric, nr=Reverse Numeric},
-	}`
+	},
 
-	filter=`{
+	filter => {
 		'extended.maxlength' => 'digits',
 		'extended.width' => 'digits',
 		'extended.height' => 'digits',
-	}`
+	},
 
-	label=`{
+	label => {
 		'extended.ui_more_alpha' => 'Alphabetic more links',
 		'extended.ui_sort_option' => 'Sort option',
 		'extended.fs_no_group' => 'No group link',
@@ -188,15 +167,15 @@
 		'extended.maxlength' => 'Maxlength',
 		'extended.check' => 'Profile check',
 		'extended.blank_default' => 'Default value',
-	}`
-	help=`{
+	},
+	help => {
 		'extended.fs_data_calc' => 'Current record passed as $item',
 		'extended.fs_data_tables' => 'To have open for Safe module',
 		'extended.maxlength' => 'For text widget (HTML maxlength=NN)',
 		'extended.blank_default' => 'Applies only when empty',
 		'extended.check' => 'Standard IC mv_profile checks -- required, postcode, etc.',
-	}`
-	widget=`{
+	},
+	widget => {
 		extended => "textarea_5_50",
 		'extended.ui_more_alpha' => 'yesno',
 		'extended.ui_sort_option' => 'select',
@@ -205,12 +184,75 @@
 		'extended.fs_data_calc' => 'textarea_4_70',
 		'extended.maxlength' => 'text_4',
 		'extended.check' => 'textarea_2_50',
-	}`
+	},
+	);
+
+	if($extra_meta) {
+#Debug("Found extra_meta=" . uneval($extra_meta));
+		my $extra_fields = '';
+		my @keys;
+		if(! $extra_meta->{_order}) {
+			@keys = grep $_ !~ /^_/, sort keys %$extra_meta;
+		}
+		elsif(ref($extra_meta->{_order})) {
+			@keys = @{$extra_meta->{_order}};
+		}
+		else {
+			@keys = grep /\S/ && $_ !~ /^_/, split /[\s,\0]+/, $extra_meta->{_order};
+		}
+		foreach my $k (@keys) {
+			my $v = $extra_meta->{$k};
+#Debug("extra_meta key=$k v=$v");
+			next unless ref($v) eq 'HASH';
+			$extra_fields .= "extended.$k\n";
+			while(my ($key, $val) = each %$v) {
+				$me_opt{$key}{"extended.$k"} = $val;
+			}
+		}
+		if($extra_fields) {
+			$me_opt{ui_data_fields} =~ s/\s*$/\n\n=Special for $sneak_type widget\n\n$extra_fields/;
+		}
+	}
 
+#Debug(uneval(\%me_opt));
+	### If there is a view, set defaults from non-view record
+	### for this item
+	
+	# Always want this removed first, don't proceed if no view
+	$Tag->tmp('tmp_defaults');
+	return unless $CGI->{ui_meta_view};
+
+	my $db = $Db{$CGI->{mv_data_table}};
+
+	# Don't bother if already exists
+	return if $db->record_exists($CGI->{item_id});
+
+	my $id = $CGI->{item_id};
+	$id =~ s/^[^:]+:+//;
+	my $rec = $db->row_hash($id)
+		or return;
+	delete $rec->{code};
+	$Scratch->{tmp_defaults} = $rec;
+	return;
+[/perl]
+
+[table-editor
+	item_id="[cgi item_id]"
+	table="[cgi mv_data_table]"
+	no-table-meta=1
+	no-meta=1
+	start-at="[cgi start_at]"
+	default=`$Scratch->{tmp_defaults}`
+	ui_data_fields=`$me_opt{ui_data_fields}`
+	options=`$me_opt{options}`
+	filter=`$me_opt{filter}`
+	label=`$me_opt{label}`
+	help=`$me_opt{help}`
+	widget=`$me_opt{widget}`
 	ui_style=1
 	output_map=1
 	tabbed=1
 	][/table-editor]
 
 @_UI_STD_FOOTER_@
-<!-- page: @@MV_PAGE@@ version: $Revision: 2.10 $ -->
+<!-- page: @@MV_PAGE@@ version: $Revision: 2.11 $ -->








More information about the interchange-cvs mailing list