[interchange-cvs] interchange - heins modified 6 files

interchange-core@icdevgroup.org interchange-core@icdevgroup.org
Sat Aug 3 17:38:01 2002


User:      heins
Date:      2002-08-03 21:37:29 GMT
Added:     dist/foundation/dbconf/default_db tree.dbm
Added:     dist/foundation/dbconf/mysql tree.mysql
Added:     dist/foundation/dbconf/oracle tree.ora
Added:     dist/foundation/dbconf/pgsql tree.pgsql
Added:     dist/foundation/products tree.txt
Added:     dist/foundation/templates/components product_tree
Log:
* Add rudimentary product_tree component and the supporting tree table.

* product_tree will be changing to use the new super-duper menu
  tag, but this gives an idea of what it will do.

Revision  Changes    Path
1.1                  interchange/dist/foundation/dbconf/default_db/tree.dbm


rev 1.1, prev_rev 1.0
Index: tree.dbm
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
Database  tree  tree.txt  TAB
Database  tree  AUTO_NUMBER 00000001



1.1                  interchange/dist/foundation/dbconf/mysql/tree.mysql


rev 1.1, prev_rev 1.0
Index: tree.mysql
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
Database  tree  tree.txt  __SQLDSN__
ifdef SQLUSER
Database  tree  USER      __SQLUSER__
endif
ifdef SQLPASS
Database  tree  PASS      __SQLPASS__
endif

Database  tree  DEFAULT_TYPE varchar(255)
Database  tree  AUTO_SEQUENCE tree_seq
Database  tree  KEY          code
Database  tree  COLUMN_DEF   "parent_fld=3Dvarchar(20)"
Database  tree  COLUMN_DEF   "msort=3Dvarchar(8)"
Database  tree  COLUMN_DEF   "extended=3Dtext"
Database  tree  COLUMN_DEF   "inactive=3Dint not null default 0"
Database  tree  INDEX        parent_fld
Database  tree  INDEX        mgroup
Database  tree  INDEX        msort
Database  tree  NO_ASCII_INDEX   1
Database  tree  HIDE_FIELD	 inactive



1.1                  interchange/dist/foundation/dbconf/oracle/tree.ora


rev 1.1, prev_rev 1.0
Index: tree.ora
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
Database  tree  tree.txt  __SQLDSN__
ifdef SQLUSER
Database  tree  USER      __SQLUSER__
endif
ifdef SQLPASS
Database  tree  PASS      __SQLPASS__
endif

Database  tree  DEFAULT_TYPE varchar(255)
Database  tree  AUTO_SEQUENCE tree_seq
Database  tree  AUTO_SEQUENCE_DROP 1
Database  tree  KEY          code
Database  tree  COLUMN_DEF   "parent_fld=3Dvarchar(20)"
Database  tree  COLUMN_DEF   "msort=3Dvarchar(8)"
Database  tree  COLUMN_DEF   "extended=3Dvarchar2(4000)"
Database  tree  COLUMN_DEF   "inactive=3Dint not null default 0"
Database  tree  INDEX        parent_fld
Database  tree  INDEX        mgroup
Database  tree  INDEX        msort
Database  tree  NO_ASCII_INDEX   1
Database  tree  HIDE_FIELD	 inactive
Database  tree  UPPERCASE 	 1



1.1                  interchange/dist/foundation/dbconf/pgsql/tree.pgsql


rev 1.1, prev_rev 1.0
Index: tree.pgsql
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
Database  tree  tree.txt  __SQLDSN__
ifdef SQLUSER
Database  tree  USER      __SQLUSER__
endif
ifdef SQLPASS
Database  tree  PASS      __SQLPASS__
endif

Database  tree  DEFAULT_TYPE varchar(255)
Database  tree  AUTO_SEQUENCE tree_seq
Database  tree  AUTO_SEQUENCE_DROP 1
Database  tree  KEY          code
Database  tree  COLUMN_DEF   "parent_fld=3Dvarchar(20)"
Database  tree  COLUMN_DEF   "msort=3Dvarchar(8)"
Database  tree  COLUMN_DEF   "extended=3Dtext"
Database  tree  COLUMN_DEF   "inactive=3Dint not null default 0"
Database  tree  INDEX        parent_fld
Database  tree  INDEX        mgroup
Database  tree  INDEX        msort
Database  tree  NO_ASCII_INDEX   1
Database  tree  HIDE_FIELD	 inactive



1.1                  interchange/dist/foundation/products/tree.txt


rev 1.1, prev_rev 1.0
Index: tree.txt
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
code	parent_fld	mgroup	msort	page	form	name	description	inactive	extended



1.1                  interchange/dist/foundation/templates/components/produ=
ct_tree


rev 1.1, prev_rev 1.0
Index: product_tree
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
[comment]
ui_component: product_tree
ui_type: component
ui_name: product_tree
ui_class: vertical
ui_group: Navigation
ui_label: Vertical category list
ui_source: templates/components/product_tree

tree_selector:
	advanced: 1
	help: Defines which tree menu is selected
	label: Tree name
	db: tree
	lookup: mgroup
	type: select
[/comment]

<!-- BEGIN COMPONENT [control component product_tree] -->
<tr><td align=3D"left" class=3D"categorybar">
  <br>
  <table width=3D"90%" align=3D"center">
  <tr>=20
    <td valign=3D"top" class=3D"categorybar">

[tmpn OLDBROWSER][/tmpn]
[if type=3Dsession term=3Dbrowser op=3D"!~" compare=3D"/MSIE [5-9].*Windows=
|Mozilla.*Gecko/"]
[set OLDBROWSER]1[/set]
[/if]

[goto name=3DOLDBROWSER if=3D"[scratch OLDBROWSER]"]

<P>
<A HREF=3D"javascript:do_explode(); void(0)" class=3Dbarlink>Explode tree</=
A><br>
<A HREF=3D"javascript:do_collapse(); void(0)" class=3Dbarlink>Collaps tree<=
/A><br>
</P>
<script>
 var lines =3D new Array;
[tmpn tmp_field_vars][/tmpn]
[tree   start=3DProducts
		table=3Dtree
		master=3Dparent_fld
		subordinate=3Dcode
		autodetect=3D1
		toggle=3Dtoggle
		sort=3Dcode
		iterator=3Djsline
		full=3D1
		spacing=3D4
		][item-sub jsline]
sub {
	my $loopname =3D shift;
	my $row =3D shift;
	$loopinc =3D 0 if ! defined $loopinc;

#Debug("loopname=3D$loopname row=3D" . uneval($row));
	$loopname =3D~ s/^\s+//;
	$loopname =3D~ s/\s+$//;
	my $fields;
	$loopname =3D~ s/[\s,]+(.*)//s
		and $fields =3D $1;
	$fields ||=3D q{
					code
					parent_fld
					mv_level
					mv_children
					mv_increment
					page
					form
					name
					description};
	$fields =3D~ s/^\s+//;
	my @fields =3D split /[\s,\0]+/, $fields;
#Debug("form=3D$row->{form}");
	if($row->{page}) {
		my $form =3D $row->{form};
		if($form) {
			$form =3D~ s/&/\n/g;
			$form .=3D "\nopen=3D";
		}
		else {
			$form =3D 'open=3D';
		}
		$row->{page} =3D $Tag->area( { href =3D> $row->{page}, form =3D> $form });
	}
	$row->{description} =3D $Tag->filter('encode_entities', $row->{description=
});
	my @values =3D @{$row}{@fields};

	if(! $Scratch->{tmp_field_vars}) {
		push @fields, 'open';
		my @out;
		for(my $i =3D 0; $i < @fields; $i++) {
			push @out, "  var \U$fields[$i]\E =3D $i;";
		}
		$Scratch->{tmp_field_vars} =3D join "\n", @out;
		pop @fields;
	}

	for(@values) {
		my $foundit =3D '';
		if(s/^\s*{\s+//) {
			s/(,?\s*\}\s*)$//;
			$foundit =3D 1;
		}
		s/\\'/-_ESC_QUOTE_-/g;
		s/'/\\'/g;
		s/\r+$/' + "\\r"/g;
		s/\r/' + "\\r" + '/g;
		s/-_ESC_QUOTE_-/\\\\\\'/g;
		if($foundit) {
			$_ =3D "{" . $_ . "}";
		}
		if(/\D/) {
			$_ =3D qq{'$_'};
		}
	}
	my $out =3D "$loopname\[" . $loopinc++  . "] =3D [" . join(", ", @values) =
 "];";
	return $out;
}
[/item-sub]lines[/tree]

[calc]
	my $out =3D '  var openstatus =3D [';
	$out .=3D  join ",", split //, $CGI->{open};
	$out .=3D "];\n";
	$out .=3D " var explode =3D ";
	$out .=3D $CGI->{explode} ? 1 : 0;
	$out .=3D ";\n";
	$out .=3D " var collapse =3D ";
	$out .=3D $CGI->{collapse} ? 1 : 0;
	$out .=3D ";\n";
	return $out;
[/calc]

[scratch tmp_field_vars]

[restrict log=3Dnone]
	var next_level =3D 0;
	var openstring =3D '';

	function tree_link (idx) {

		var out =3D '';
		var treebox;

		var l =3D lines[idx];

		if(l =3D=3D undefined) {
			do_alert("Bad idx=3D" + idx + ", no line there.");
			return;
		}

		if(l[MV_LEVEL] > next_level)
			return '';
			// return 'next_level=3D' + next_level + ', mv_level=3D' + l[MV_LEVEL] +=
 '<br>';
// alert("line is " + l);
		var i;
		var needed =3D l[MV_LEVEL];
		for(i =3D 1; i <=3D needed; i++)
			out =3D out + '&nbsp;&nbsp;&nbsp;&nbsp;';

		if(l[MV_CHILDREN] > 0) {
			out =3D out + '<a href=3D"javascript:toggit(' + idx + ');void(0)">';
			var iname;
			if(openstatus[idx] =3D=3D 1) {
				iname =3D "__IMAGE_DIR__/" + "folder.open.gif";
				out =3D out + '<img src=3D' + '"' + iname + '" border=3D0 align=3Dabsbo=
ttom>';
				next_level =3D l[MV_LEVEL] + 1;
			}
			else {
				iname =3D "__IMAGE_DIR__/folder.gif";
				out =3D out + '<img src=3D' + '"' + iname + '" border=3D0 align=3Dabsbo=
ttom>';
				next_level =3D l[MV_LEVEL];
			}
			out =3D out + '</a>';
		}
		else {
			out =3D out + '<img'; // > Defeate image subst
			out =3D out + ' src=3D"' + '__IMAGE_DIR__/bg.gif" height=3D22';
			out =3D out + ' width=3D20 border=3D0 align=3Dabsbottom>';
			next_level =3D l[MV_LEVEL];
		}

		if(l[PAGE]) {
			out =3D out + '<a class=3Dbarlink href=3D"' + l[PAGE] + openstring + '"';
			out =3D out + ' onDblClick=3D"toggit(' + idx + ')"';
			if(l[DESCRIPTION])
				out =3D out + ' title=3D"' + l[DESCRIPTION] + '"';
			out =3D out + '>';
			out =3D out + l[NAME] + '</a>';
		}
		else {
			out =3D out + l[NAME];
		}
		// out =3D out + ' level=3D' + l[MV_LEVEL] + ' children=3D' + l[MV_CHILDR=
EN];
		// out =3D out + ' needed=3D' + needed + ", next_level=3D" + next_level;
		out =3D out + '<br>';

		return out;
	}

	function toggit (idx) {

		var l =3D lines[idx];
		if(l =3D=3D undefined) {
			alert("bad index " + idx);
			return;
		}
		if(l[MV_CHILDREN] < 1) {
			alert("nothing to toggle at index " + idx);
			return;
		}

		openstatus[idx] =3D openstatus[idx] =3D=3D 1 ? 0 : 1;
		openstring =3D openstatus.join('');
		openstring =3D openstring.replace(/0+$/, '');
		rewrite_tree();
	}

	function do_explode () {
		for(var i =3D 0; i < lines.length; i++)
			openstatus[i] =3D 1;
		rewrite_tree();
	}

	function do_collapse () {
		for(var i =3D 0; i < lines.length; i++)
			openstatus[i] =3D 0;
		rewrite_tree();
	}


	function rewrite_tree () {
		var thing =3D '';
		for(i =3D 0; i < lines.length; i++) {
			thing =3D thing + tree_link(i);
		}
		treebox.innerHTML =3D thing;
		next_level =3D 0;
	}

</script>
[/restrict]

<div id=3Dtreebox style=3D"Visibility: Visible">
Test.
</div>

<script>
	treebox =3D document.getElementById('treebox');
	if(collapse =3D=3D 1 || explode =3D=3D 1) {
		openstatus.length =3D 0;
	}
	for( var i =3D 0; i < lines.length; i++) {
		if(openstatus[i] =3D=3D undefined)
			openstatus[i] =3D explode;
	}
	collapse =3D 0;
	explode =3D 0;
	openstring =3D openstatus.join('');
	openstring =3D openstring.replace(/0+$/, '');
	rewrite_tree();
</script>

[goto LAST]
&nbsp;

[label OLDBROWSER]

<P>
<a href=3D"[area href=3D@@MV_PAGE@@ form=3D"explode=3D1"]" class=3Dbarlink>=
Explode tree</A><br>
<a href=3D"[area href=3D@@MV_PAGE@@ form=3D"collapse=3D1"]" class=3Dbarlink=
>Collapse tree</A>
</P>

[tree   start=3D"[control tree_selector Products]"
		table=3Dtree
		master=3Dparent_fld
		subordinate=3Dcode
		autodetect=3D1
		toggle=3Dtoggle
		memo=3Dmemo
		sort=3Dcode
		collapse=3Dcollapse
		explode=3Dexplode
		spacer=3D"&nbsp;"
		spacing=3D4
		iterator=3Dtree_link
		/]

[label LAST]

    </td>
  </tr>
  </table>
  <br>
</td></tr>

<!-- END COMPONENT [control component product_tree] -->