[LON-CAPA-cvs] cvs: modules /matthew/newrat Conditional.js Container.js DisplayManager.js HR.js Item.js Resource.js Sequence.js footer.html s_rat_canvas.html s_rat_file.html s_rat_info.html s_rat_menu.html test.js /matthew/newrat/icons cab.gif class.gif dvi.gif eps.gif exam.gif form.gif gif.gif html.gif jar.gif jpg.gif meta.gif mov.gif page.gif pdf.gif png.gif problem.gif ps.gif quiz.gif sequence.gif survey.gif tex.gif txt.gif unknown.gif wav.gif xml.gif zip.gif
matthew
lon-capa-cvs@mail.lon-capa.org
Thu, 21 Mar 2002 22:30:10 -0000
This is a MIME encoded message
--matthew1016749810
Content-Type: text/plain
matthew Thu Mar 21 17:30:10 2002 EDT
Added files:
/modules/matthew/newrat s_rat_canvas.html s_rat_file.html
s_rat_info.html s_rat_menu.html
/modules/matthew/newrat/icons cab.gif class.gif dvi.gif eps.gif
exam.gif form.gif gif.gif html.gif
jar.gif jpg.gif meta.gif mov.gif
page.gif pdf.gif png.gif problem.gif
ps.gif quiz.gif sequence.gif
survey.gif tex.gif txt.gif
unknown.gif wav.gif xml.gif zip.gif
Modified files:
/modules/matthew/newrat Conditional.js Container.js
DisplayManager.js HR.js Item.js Resource.js
Sequence.js footer.html test.js
Log:
'brief' display mode added.
Container class now has edit form helper functions.
Display Manager is in its infancy
Sequences now automatically assign unique id's to added items.
Sequence.decorate(item) will wrap the item.draw(mode) output with icons
and other conveniences.
Added auxiliary frame files to please netscape 4.7, but I'd like to move
these back into the display manager.
Added a hunk of icons to be used for different resources.
Many silly formatting changes that lead to large changelogs but little
in the way of noticable change.
./assemble.pl; netscape ./simple_rat.html will still give a preview.
--matthew1016749810
Content-Type: text/plain
Content-Disposition: attachment; filename="matthew-20020321173010.txt"
Index: modules/matthew/newrat/Conditional.js
diff -u modules/matthew/newrat/Conditional.js:1.2 modules/matthew/newrat/Conditional.js:1.3
--- modules/matthew/newrat/Conditional.js:1.2 Tue Mar 19 17:06:52 2002
+++ modules/matthew/newrat/Conditional.js Thu Mar 21 17:30:10 2002
@@ -1,7 +1,7 @@
//
// Conditional.js
//
-// $Id: Conditional.js,v 1.2 2002/03/19 22:06:52 matthew Exp $
+// $Id: Conditional.js,v 1.3 2002/03/21 22:30:10 matthew Exp $
//
// Child of Item.js
// A Conditional is a file in the lon-capa system.
@@ -15,16 +15,22 @@
var result = '';
if (mode == 'icon') {
} else if (mode == 'edit') {
+ } else if (mode == 'brief') {
+ result += '<table bgcolor="'+this.get_color()+'" width="100%">';
+ result += '<tr><td width="1%"><b>C</b></td>';
+ result += '<td width="90%">'+this.condition;
+ result += '</td></tr></table>';
} else if (mode == 'normal') {
result += '<table bgcolor="'+this.get_color()+'" width="100%">';
- result += '<tr><td colspan="2">Conditional</td></tr>';
+ result += '<tr><td colspan="2"><b>Condition</b></td></tr>';
result += '<tr><td>Condition:</td><td width="90%">'+this.condition;
result += '</td></tr>';
result += '<tr><td>Effect:</td><td>'+this.effect+'</td></tr>';
result += '</table><br \>';
} else if (mode == 'full') {
result += '<table bgcolor="'+this.get_color()+'" width="100%">';
- result += '<tr><td colspan="2">Conditional</td></tr>';
+ result += '<tr><td><b>Condition</b></td>';
+ result += '<td align="right">'+this.id+'</td></tr>';
result += '<tr><td>Condition:</td><td width="90%">'+this.condition;
result += '</td></tr>';
result += '<tr><td>Effect:</td><td>'+this.effect+'</td></tr>';
Index: modules/matthew/newrat/Container.js
diff -u modules/matthew/newrat/Container.js:1.1 modules/matthew/newrat/Container.js:1.2
--- modules/matthew/newrat/Container.js:1.1 Wed Mar 20 17:03:06 2002
+++ modules/matthew/newrat/Container.js Thu Mar 21 17:30:10 2002
@@ -1,7 +1,7 @@
//
// Container.js
//
-// $Id: Container.js,v 1.1 2002/03/20 22:03:06 matthew Exp $
+// $Id: Container.js,v 1.2 2002/03/21 22:30:10 matthew Exp $
//
// Base class for sequences and pages
//
@@ -44,6 +44,39 @@
function Container_set_type(t) { this.type = t; }
function Container_get_type() { return this.type; }
+function Container_radiobuttons(id,name,values,current) {
+ var myname = id + ':' + name;
+ var result = '';
+ for (var i = 0; i<values.length; i++) {
+ result += '<input type="radio" name="'+myname+'" id="'+myname+'" ';
+ result += 'value="'+values[i]+'"';
+ if (values[i] == current) {
+ result += ' checked';
+ }
+ result += ' > '+values[i]+'</input> ';
+ }
+ return result;
+}
+
+function Container_textfield(id,name,value) {
+ var result = '';
+ var editsize = 40;
+ var myname = id + ':' + name;
+ result += '<input type="text" maxlength="200" size="'+editsize+'" ';
+ result += 'name="'+myname+'" id="'+myname+'" ';
+ result += 'value="'+value+'" /> ';
+ return result;
+}
+
+function Container_checkbox(id,name,state) {
+ var myname = id + ":" + name;
+ var result = '';
+ result += '<input type="checkbox" name="'+myname+'" id="'+myname+'"';
+ if (state) { result += ' checked ' } ;
+ result += '" >'+name+'</input> ';
+ return result;
+}
+
function Container() {
this.type = "Container";
// this.contents holds the items, this is implementation specific.
@@ -66,4 +99,8 @@
this.draw_contents = Container_draw_contents;
// Event handler
this.handle_event = Container_handle_event;
+ // Edit field helper functions
+ this.textfield = Container_textfield;
+ this.radiobuttons = Container_radiobuttons;
+ this.checkbox = Container_checkbox;
}
Index: modules/matthew/newrat/DisplayManager.js
diff -u modules/matthew/newrat/DisplayManager.js:1.2 modules/matthew/newrat/DisplayManager.js:1.3
--- modules/matthew/newrat/DisplayManager.js:1.2 Wed Mar 20 17:03:06 2002
+++ modules/matthew/newrat/DisplayManager.js Thu Mar 21 17:30:10 2002
@@ -1,10 +1,12 @@
// First attempt at getting these damned objects to display themselves
//
-// $Id: DisplayManager.js,v 1.2 2002/03/20 22:03:06 matthew Exp $
+// $Id: DisplayManager.js,v 1.3 2002/03/21 22:30:10 matthew Exp $
//
// Open debugging window
//
+var mainwin = window;
+
var debugging = true;
if (debugging) {
var debuggingWindow = window.open('','Debug','width=400,height=300',true);
@@ -15,13 +17,24 @@
debuggingWindow.document.writeln(text);
}
}
+
+var canvas;
+output("Number of frames: "+window.frames.length);
+
+function redisplay(mode) {
+ canvas.open();
+ display_container(Seq,mode);
+ canvas.close();
+}
+
+function display_container(container,mode) {
+ var Results = container.draw_contents(mode);
+ canvas.writeln("<html><head></head><body><form>");
+ canvas.writeln(Results.join("\n"));
+ canvas.writeln("</form></body></html>");
+}
+
output("<html><head><title>Debugging Window</title></head>");
output("<body><hr /><pre>");
-// IconPatterns holds the file extensions we have icons for. Changes to
-// the contents of /html/adm/lonIcons need to be reflected here.
-var IconPatterns = new Array(
- "html","problem","quiz","exam","page","sequence","gif","jpg","png",
- "pdf","txt","wav","xml","zip","cab","class","dvi","eps","form","jar",
- "meta","mov","ps","survey","tex");
Index: modules/matthew/newrat/HR.js
diff -u modules/matthew/newrat/HR.js:1.2 modules/matthew/newrat/HR.js:1.3
--- modules/matthew/newrat/HR.js:1.2 Tue Mar 19 17:06:52 2002
+++ modules/matthew/newrat/HR.js Thu Mar 21 17:30:10 2002
@@ -1,7 +1,7 @@
//
// HR.js
//
-// $Id: HR.js,v 1.2 2002/03/19 22:06:52 matthew Exp $
+// $Id: HR.js,v 1.3 2002/03/21 22:30:10 matthew Exp $
//
// Child of Item.js
// A HR is a horizontal rule which can be held inside a page.
@@ -14,13 +14,18 @@
var result = '';
if (mode == 'icon') {
} else if (mode == 'edit') {
+ } else if (mode == 'brief') {
+ result += '<table bgcolor="#8888FF" width="100%">';
+ result += '<tr><td align="left" ><b>H</b></td></tr>';
+ result += '</table>';
} else if (mode == 'normal') {
result += '<table bgcolor="#8888FF" width="100%">';
- result += '<tr><td>Horizontal Rule</td></tr>';
+ result += '<tr><td><b>Horizontal Rule</b></td></tr>';
result += '</table><br \>';
} else if (mode == 'full') {
result += '<table bgcolor="#8888FF" width="100%">';
- result += '<tr><td>Horizontal Rule</td></tr>';
+ result += '<tr><td><b>Horizontal Rule</b></td>';
+ result += '<td align="right">'+this.id+'</tr>';
result += '<tr><td valign="top" >Parameters:</td><td>';
for (var i=0; i<this.parms.length; i++) {
if (this.parms[i] != null) {
@@ -37,13 +42,10 @@
function HR_undo() { }
function HR_redo() { }
-function HR(id) {
+function HR() {
this.parms = new Array(); // Probably unnecessary, but what the hell.
//
this.set_type('hr');
- if (arguments.length >= 1) {
- this.set_id(id);
- }
// Required methods
this.draw = HR_draw;
this.load = HR_load;
Index: modules/matthew/newrat/Item.js
diff -u modules/matthew/newrat/Item.js:1.2 modules/matthew/newrat/Item.js:1.3
--- modules/matthew/newrat/Item.js:1.2 Wed Mar 20 17:03:06 2002
+++ modules/matthew/newrat/Item.js Thu Mar 21 17:30:10 2002
@@ -1,7 +1,7 @@
//
// Item.js
//
-// $Id: Item.js,v 1.2 2002/03/20 22:03:06 matthew Exp $
+// $Id: Item.js,v 1.3 2002/03/21 22:30:10 matthew Exp $
//
// The base item for a resource, sequence, link, page, rule, etc
// Essentially, everything that can be held in a sequence or page is
@@ -50,43 +50,11 @@
return;
}
-function Item_radiobuttons(name,values,current) {
- var myname = this.id + ':' + name;
- var result = '';
- for (var i = 0; i<values.length; i++) {
- result += '<input type="radio" name="'+myname+'" id="'+myname+'" ';
- result += 'value="'+values[i]+'"';
- if (values[i] == current) {
- result += ' checked="true"';
- }
- result += ' > '+values[i]+'</input>';
- }
- return result;
-}
-
-function Item_textfield(name,value) {
- var result = '';
- var editsize = 40;
- var myname = this.id + ':' + name;
- result += '<input type="text" maxlength="200" size="'+editsize+'" ';
- result += 'name="'+myname+'" id="'+myname+'" ';
- result += 'value="'+value+'" />';
- return result;
-}
-
-function Item_checkbox(name,state) {
- var myname = this.id + ":" + name;
- var result = '';
- result += '<input type="checkbox" name="'+myname+'" id="'+myname+'"';
- if (state) { result += ' checked ' } ;
- result += '" >'+name+'</input>';
- return result;
-}
-
function Item() {
// internal data
this.icon = 'unknown.gif';
this.type = 'item';
+ this.owner = null; // The container for this Item (there can only be one)
this.id = null;
this.parms = null; // Each child must allocate their own.
// methods
@@ -97,10 +65,6 @@
this.add_parm = Item_add_parm;
this.remove_parm = Item_remove_parm;
this.change_parm = Item_change_parm;
- // Editing help
- this.checkbox = Item_checkbox;
- this.textfield = Item_textfield;
- this.radiobuttons = Item_radiobuttons;
// "virtual" methods (must be overridden by descendents)
this.draw = Item_draw;
this.load = null;
@@ -109,4 +73,10 @@
this.redo = null;
}
-
+// IconPatterns holds the file extensions we have icons for. Changes to
+// the contents of /html/adm/lonIcons need to be reflected here.
+var IconPatterns = new Array(
+ "html","problem","quiz","exam","page","sequence","gif","jpg","png",
+ "pdf","txt","wav","xml","zip","cab","class","dvi","eps","form","jar",
+ "meta","mov","ps","survey","tex");
+var IconPath = './icons/';
Index: modules/matthew/newrat/Resource.js
diff -u modules/matthew/newrat/Resource.js:1.3 modules/matthew/newrat/Resource.js:1.4
--- modules/matthew/newrat/Resource.js:1.3 Wed Mar 20 17:03:06 2002
+++ modules/matthew/newrat/Resource.js Thu Mar 21 17:30:10 2002
@@ -1,7 +1,7 @@
//
// Resource.js
//
-// $Id: Resource.js,v 1.3 2002/03/20 22:03:06 matthew Exp $
+// $Id: Resource.js,v 1.4 2002/03/21 22:30:10 matthew Exp $
//
// Child of Item.js
// A Resource is a file in the lon-capa system.
@@ -16,9 +16,15 @@
function Resource_draw(mode) {
var result = '';
if (mode == 'icon') {
+ } else if (mode == 'brief') {
+ result+='<table bgcolor="'+this.get_color()+'" width="100%" >';
+ result+='<tr>';
+ result+='<td width="1%"><b>R</b></td><td width="90%">'+this.Title;
+ result+='</td></tr></table>';
} else if (mode == 'normal') {
result+='<table bgcolor="'+this.get_color()+'" width="100%" >';
- result+='<tr><td>Resource</td><td align="right">'+this.id+'</td></tr>';
+ result+='<tr><td><b>Resource</b></td>';
+ result+='<td align="right">'+this.id+'</td></tr>';
result+='<tr><td>Title:</td><td width="100%">'+this.Title+'</td></tr>';
result+='<tr><td>URL:</td><td>'+this.url+'</td></tr>';
result+='<tr><td>use:</td><td>'+this.use+'</td></tr>';
@@ -26,7 +32,8 @@
result+='</table><br \>';
} else if (mode == 'full') {
result+='<table bgcolor="'+this.get_color()+'" width="100%" >';
- result+='<tr><td>Resource</td><td align="right">'+this.id+'</td></tr>';
+ result+='<tr><td><b>Resource</b></td>';
+ result+='<td align="right">'+this.id+'</td></tr>';
result+='<tr><td>Title:</td><td width="100%">'+this.Title+'</td></tr>';
result+='<tr><td>URL:</td><td>'+this.url+'</td></tr>';
result+='<tr><td>use:</td><td>'+this.use+'</td></tr>';
@@ -41,15 +48,20 @@
result+='</table><br \>';
} else if (mode == 'edit') {
result+='<table bgcolor="'+this.get_color()+'" width="100%" >';
- result+='<tr><td>Resource</td><td align="right">'+this.id+'</td></tr>';
+ result+='<tr><td><b>Resource</b></td>';
+ result+='<td align="right">'+this.id+'</td></tr>';
result+='<tr><td>Title:</td><td width="100%">';
- result+=this.textfield('title',this.Title);
+ result+=this.owner.textfield(this.id,'title',this.Title);
result+='</td></tr>';
result+='<tr><td>URL:</td><td>';
- result+=this.textfield('url',this.url);
+ result+=this.owner.textfield(this.id,'url',this.url);
+ result+='</td></tr>';
+ result+='<tr><td colspan="2">';
+ result+=this.owner.radiobuttons(this.id,'use',Resource_uses,this.use);
+ result+='</td></tr>';
+ result+='<tr><td colspan="2">';
+ result+=this.owner.checkbox(this.id,'External',this.external);
result+='</td></tr>';
- result+='<tr><td colspan="2">'+this.radiobuttons('use',Resource_uses,this.use)+'</td></tr>';
- result+='<tr><td colspan="2">'+this.checkbox('External',this.external)+'</td></tr>';
result+='<tr><td>icon:</td><td>'+this.icon+'</td></tr>';
result+='</table><br \>';
} else {
Index: modules/matthew/newrat/Sequence.js
diff -u modules/matthew/newrat/Sequence.js:1.2 modules/matthew/newrat/Sequence.js:1.3
--- modules/matthew/newrat/Sequence.js:1.2 Wed Mar 20 17:03:06 2002
+++ modules/matthew/newrat/Sequence.js Thu Mar 21 17:30:10 2002
@@ -1,7 +1,7 @@
//
// Sequence.js
//
-// $Id: Sequence.js,v 1.2 2002/03/20 22:03:06 matthew Exp $
+// $Id: Sequence.js,v 1.3 2002/03/21 22:30:10 matthew Exp $
//
// Child of Container.js
// A Sequence is a file in the lon-capa system. A Sequence contains items.
@@ -16,19 +16,53 @@
// Call the item.draw() method of each of the contained items
// Should I return an array or an html string???
// We'll do an html string at first.
- var result = '';
+ var Results = new Array;
for (var i = 0; i < this.contents.length; i++) {
if (this.contents[i]) {
- result += this.contents[i].draw(mode);
+ Results[Results.length] = this.decorate(this.contents[i],mode);
}
}
+ return Results;
+}
+
+function Sequence_decorate(item,mode) {
+ var result = '';
+ if (mode == 'icon') {
+ } else if (mode == 'brief') {
+ result+='<table width="100%">';
+ result+='<td width="1%"><img src="'+IconPath+item.icon+'" /></td>';
+ result+='<td>'+item.draw(mode)+'</td></tr>';
+ result+='</table>';
+ } else if (mode == 'normal') {
+ result+='<table width="100%">';
+ result+='<td><img src="'+IconPath+item.icon+'" /><br />';
+ result+='<img src="'+IconPath+'meta.gif" /></td>';
+ result+='<td>'+item.draw(mode)+'</td></tr>';
+ result+='</table>';
+ } else if (mode == 'full') {
+ result+='<table width="100%">';
+ result+='<td><img src="'+IconPath+item.icon+'" /><br />';
+ result+='<img src="'+IconPath+'meta.gif" /></td>';
+ result+='<td>'+item.draw(mode)+'</td></tr>';
+ result+='</table>';
+ } else if (mode == 'edit') {
+ result+='<table width="100%">';
+ result+='<td><img src="'+IconPath+item.icon+'" /><br />';
+ result+='<img src="'+IconPath+'meta.gif" /></td>';
+ result+='<td>'+item.draw(mode)+'</td></tr>';
+ result+='</table>';
+ } else {
+ }
return result;
}
function Sequence_append(item) {
// Add (item) to the end of the contained items
var index = this.contents.length;
+ item.set_id(this.maxid++);
+ item.owner = this;
this.contents[index]=item;
+ return item.get_id();
}
function Sequence_indexof(id) {
@@ -63,7 +97,10 @@
}
//
// Finally, assign the new value
+ item.set_id(this.maxid++);
+ item.owner = this;
this.contents[index]=item;
+ return item.get_id();
}
function Sequence_remove(id) {
@@ -118,7 +155,7 @@
function Sequence() {
// Allocate storage space for items
this.contents = new Array();
-
+ this.maxid = 0;
// We have a container, now make it a sequence
this.set_type('sequence');
// Unimplemented methods
@@ -135,5 +172,6 @@
this.moveup = Sequence_moveup;
this.movedown = Sequence_movedown;
this.add_parm_to = Sequence_add_parm_to;
+ this.decorate = Sequence_decorate;
}
Sequence.prototype = new Container();
Index: modules/matthew/newrat/footer.html
diff -u modules/matthew/newrat/footer.html:1.1 modules/matthew/newrat/footer.html:1.2
--- modules/matthew/newrat/footer.html:1.1 Tue Mar 19 13:46:53 2002
+++ modules/matthew/newrat/footer.html Thu Mar 21 17:30:10 2002
@@ -1,7 +1,16 @@
</script>
-<!-- $Id: footer.html,v 1.1 2002/03/19 18:46:53 matthew Exp $ -->
+<!-- $Id: footer.html,v 1.2 2002/03/21 22:30:10 matthew Exp $ -->
<head>
<title>Simple Resource Assembly Tool</title>
</head>
-<body>
-</body>
+<frameset rows="30,*">
+ <frame name="DMwindow" id="DMwindow" src="s_rat_menu.html">
+ <frameset cols="*,*">
+ <frameset rows="70,30">
+ <frame name="canvasWin" id="canvasWin" src="s_rat_canvas.html">
+ <frame name="infoWin" id="infoWin" src="s_rat_info.html">
+ </frameset>
+ <frame name="fileWin" id="fileWin" src="s_rat_file.html">
+ </frameset>
+</frameset>
+</html>
Index: modules/matthew/newrat/test.js
diff -u modules/matthew/newrat/test.js:1.3 modules/matthew/newrat/test.js:1.4
--- modules/matthew/newrat/test.js:1.3 Wed Mar 20 17:03:06 2002
+++ modules/matthew/newrat/test.js Thu Mar 21 17:30:10 2002
@@ -1,20 +1,18 @@
//
// test.js - javascript testing file for new rat objects
//
-// $Id: test.js,v 1.3 2002/03/20 22:03:06 matthew Exp $
+// $Id: test.js,v 1.4 2002/03/21 22:30:10 matthew Exp $
//
// Create a fake sequence...
var Seq = new Sequence();
for (var i=0; i<15; i++) {
output("Creating Resource: "+i);
var tmp = new Resource("Resource " +i,"/dev/null");
- tmp.set_id(i);
Seq.append(tmp);
}
-output("Creating Insurgent Resource (id 666)");
+output("Creating Insurgent Resource");
tmp = new Resource("Insurgent Resource","/simple.gif");
-tmp.set_id(666);
output("Inserting Insurgent Resource");
Seq.insert(tmp);
@@ -23,47 +21,44 @@
output("Creating another extra resource");
tmp = new Resource("Another Insurgent Resource","/sample.png");
-tmp.set_id(667);
output("Inserting extra resource after element 7");
Seq.insert(tmp,7);
-output("Creating hr (38)");
-tmp = new HR(38);
+output("Creating hr ");
+tmp = new HR();
output("Inserting hr after resource id 4");
-Seq.insert(tmp,4);
+var hrindex = Seq.insert(tmp,4);
output("moving hr up from 4...");
-Seq.moveup(38);
+Seq.moveup(hrindex);
output("moving hr up from 3...");
-Seq.moveup(38);
+Seq.moveup(hrindex);
output("moving hr up from 2...");
-Seq.moveup(38);
+Seq.moveup(hrindex);
output("moving hr up from 1...");
-Seq.moveup(38);
+Seq.moveup(hrindex);
output("moving hr up from 0...(once)");
-Seq.moveup(38);
+Seq.moveup(hrindex);
output("moving hr up from 0...(twice)");
-Seq.moveup(38);
+Seq.moveup(hrindex);
output("moving hr up from 0...(three times)");
output("see, it doesn\'t break");
-Seq.moveup(38);
+Seq.moveup(hrindex);
output("moving hr down a lot");
-Seq.movedown(38);
-Seq.movedown(38);
-Seq.movedown(38);
-Seq.movedown(38);
-Seq.movedown(38);
-Seq.movedown(38);
-Seq.movedown(38);
-Seq.movedown(38);
-Seq.movedown(38);
+Seq.movedown(hrindex);
+Seq.movedown(hrindex);
+Seq.movedown(hrindex);
+Seq.movedown(hrindex);
+Seq.movedown(hrindex);
+Seq.movedown(hrindex);
+Seq.movedown(hrindex);
+Seq.movedown(hrindex);
+Seq.movedown(hrindex);
output("Creating conditional");
tmp = new Conditional('pigs fly');
output("Inserting conditional");
Seq.insert(tmp,2);
-output("Since things are not set up properly yet,");
-output("I was able to insert the conditional without an id");
output("Adding Parameters");
Seq.add_parm_to('creature','fish' ,'halibut' ,2);
@@ -75,7 +70,10 @@
//
output("Displaying the results");
-document.writeln('<form>');
-// mode can be 'edit', 'normal', or 'full' ('icon' is planned in the future
-document.writeln(Seq.draw_contents('full'));
-document.writeln('</form>');
+//document.writeln('<form>');
+// mode can be 'edit', 'normal', 'full', 'brief'
+// ('icon' is planned in the future
+//display_container(Seq,'full');
+// document.writeln(Seq.draw_contents('normal'));
+//document.writeln('</form>');
+
Index: modules/matthew/newrat/s_rat_canvas.html
+++ modules/matthew/newrat/s_rat_canvas.html
<html>
<script type="text/javascript" language="JavaScript">
parent.parent.canvas = this.document;
</script>
<head>
<title>Canvas Window</title>
</head>
<body>
Canvas Window
</body>
</html>
Index: modules/matthew/newrat/s_rat_file.html
+++ modules/matthew/newrat/s_rat_file.html
<html>
<head>
<title>File Frame</title>
</head>
<body>
File Frame
</body>
</html>
Index: modules/matthew/newrat/s_rat_info.html
+++ modules/matthew/newrat/s_rat_info.html
<html>
<head><title>Info Frame</title></head>
<body>
Info Frame
</body>
</html>
Index: modules/matthew/newrat/s_rat_menu.html
+++ modules/matthew/newrat/s_rat_menu.html
<html>
<head><title>Menu Frame</title></head>
<body>
<a href="javascript:parent.redisplay('normal');">Normal</a>
<a href="javascript:parent.redisplay('brief');" >Brief</a>
<a href="javascript:parent.redisplay('full');" >Full</a>
<a href="javascript:parent.redisplay('edit');" >Edit</a>
</body>
</html>
--matthew1016749810--