Revision 8 (by ahitrov@rambler.ru, 2010/03/29 11:46:38) Contenido UTF-8 core files
%# vim:syn=mason

% if ($object->$name) {
	<table>
	<tr><th>Название</th><th>Удалить?</th></tr>
%	foreach my $geoid ($object->$name) {
		<tr><td><% $all_labels->{$geoid} || 'неизвестно' %></td><td><input type="checkbox" name="<% $name %>_delete" value="<% $geoid %>"/></td></tr>
%	}
	</table>
% }

Добавить: 
<input onkeyup="find_word_<% $name %>()" type="text" name="<% $name."_tmp" %>" size="10" onfocus="key_flag_<% $name %> = 0;" onblur="key_flag_<% $name %> = 1;"<% $prop->{readonly} ? 'readonly' : '' %>>
<select name="<% $name %>_add"<% $prop->{readonly} ? ' disabled' : '' %>>
	<option value="" selected="selected"></option>
% foreach my $value (sort { $all_labels->{$a} cmp $all_labels->{$b} } keys %$all_values) {
	<option value="<% $value %>"><% $all_labels->{$value} %></option>
% }
</select>

<script type="text/javascript">
	var key_flag_<% $name %> = 1;

	if (navigator.appName == "Netscape") {
		document.captureEvents(Event.KEYUP);
	}

	function find_word_<% $name %>() {
		var str1 = document.form.<% $name."_tmp" %>.value;
		if (str1 == "" || key_flag_<% $name %>) return;

		for (var i = 0; i < document.form.<% $name %>_add.options.length; i++) {
			var source = document.form.<% $name %>_add.options[i].text;
			source = source.toLowerCase();
			str1 = str1.toLowerCase();
			if ( source.indexOf(str1) == 0) {
				document.form.<% $name %>_add.options[i].selected=true;
				break;
			}
		}
	}

</script>
<%args>
	$object
	$name => undef
	$check => undef
	$prop => {}
</%args>
<%init>
	use locale;

	my ($all_values, $all_labels);

    my $geo_type = $prop->{'geo_type'} || [1, 3]; # По умолчанию выбираем регионы России и страны

	foreach my $i (@{$geo_type}) {
		my ($err, $msg) = $rpc_client->id->get_geo_tree($i);
		return unless $err->{success};
		map { $all_values->{$_} = 1 } @{$msg->{values}};
		$all_labels->{$_} = $msg->{labels}->{$_} foreach keys %{$msg->{labels}};
	}
    
</%init>