Modifying the Frameset

While SVG Mapper used tables to arrange content on the browser screen, ArcIMS uses a more complex approach, frames.  Almost all browsers now support frames and ArcIMS has a check upon loading that checks to see that the browser is current enough to run frames and kicks you out if it is not.

Tables manage content in rows and columns and the content is actually a part of the page.  Frames contain only a link to another htm file - any content you add between the <FRAME> tags will not display.  So for each frame on the page there is a separate htm file.

This graphic, from ArcIMS 9.0 - Customizing the HTML Viewer, shows the frame name (in quotes) and the htm file that is loaded into that frame.  It also shows the width and height in pixels of each frame.

top.htm - contains the ArcIMS logo, puts the title of the website (set by Designer) and has a graduated gray bar.
toolbar.htm - has the tools you checked on in Designer arranged in a table two columns wide.
modeframe - a small frame that lets you know which tool is currently available
text.htm - used mostly in queries.  The input form to create a query appears here as well as the results from a query or identify function.
bottom.htm - a blank area with a graduated gray background image; text could be placed here.
tocframe.htm - the place where you toggle between the legend (a graphic image) and the table of contents (a dynamic html file)
mapframe.htm - where the map goes.  This frame will fill the existing space after the other frames are drawn.
jsform.htm - the Java Script form page.  The graphic says it is one pixel high but actually it is 0 pixels; this is an invisible frame but it must be there because it is where the Java scripts place and retrieve information from the server.  WIthout this frame you have no communication with the server.

The frameset is found in the viewer.htm file. 

This is dymanic HTML which means that the Java Script actually writes this html each time viewer.htm is loaded.  So if you ignore the Java commands that wrap the frameset and cut out the formatting information, it looks like this.  I have added html comments in bold to explain what the tag is doing

<FRAMESET ROWS="' + (30+addNS) + ',*,30,0" FRAMEBORDER="No" FRAMESPACING="0" onload="doIt()" BORDER=0 ' + moreStuff + '>
<!--- opens a FRAMESET tag with four rows --- >
   
<FRAME NAME="TopFrame" SRC="top.htm" MARGINWIDTH="5" MARGINHEIGHT="0" SCROLLING="No" FRAMEBORDER="0" NORESIZE>
   <!--- the first row is the TopFrame -->
    <FRAMESET COLS="' + (50+addNS) + ',*,180" FRAMEBORDER="No" FRAMESPACING="0" BORDER=0>
           <!--- the second row has three columns - one 50 +addNS (3 in this case) pixels, the second fills all available space and the third 180 pixels --->
         <FRAME NAME="ToolFrame" SRC="blank.htm" MARGINWIDTH="0" MARGINHEIGHT="0" SCROLLING="No" FRAMEBORDER="0" NORESIZE FRAMESPACING="0" BORDER="0">
             <!--- the toolbar goes in the first column of the second row --->
            <FRAMESET ROWS="*,110">
            <!--- the second column has two rows - the first fills all leftover space and the second is 110 pixels high --->
                     <FRAME NAME="MapFrame" SRC="MapFrame.htm" MARGINWIDTH="0" MARGINHEIGHT="0" SCROLLING="No" FRAMEBORDER="Yes" RESIZE="YES">
                     <!--- the map frame goes in the first row of this second column filling all available space --->
                    <FRAME NAME="TextFrame" SRC="text.htm" MARGINWIDTH="0" MARGINHEIGHT="0" SCROLLING="Auto" FRAMEBORDER="Yes" RESIZE="YES">
                    <!--- the text frame goes in the second row of this second column, 110 pixels high --->
             </FRAMESET>
             <!--- the FRAMESET holding the map frame and text frame is closed --->
        <FRAME NAME="TOCFrame" SRC="TOCFrame.htm" MARGINWIDTH="0" MARGINHEIGHT="0" SCROLLING="Auto" FRAMEBORDER="Yes" RESIZE="YES">
    <!--- the first and second columns are filled so the table of contents fills the third column
   </FRAMESET>
   <!--- closes the FRAMESET holding tools, maps, text and table of contents
<FRAMESET COLS="180,*" FRAMEBORDER="0" BORDER=0 FRAMESPACING="0">
<!--- a new FRAMESET with two columns, one of 180 pixels and the other filling the rest of the screen --->
<FRAME NAME="ModeFrame" SRC="bottom.htm" MARGINWIDTH="0" MARGINHEIGHT="0" SCROLLING="No" FRAMEBORDER="No" NORESIZE>
<!--- the mode frame goes in the first column of this frameset
<FRAME NAME="BottomFrame" SRC="bottom.htm" MARGINWIDTH="0" MARGINHEIGHT="0" SCROLLING="No" FRAMEBORDER="No" NORESIZE>
<!--- the bottom fram fills the second column
</FRAMESET>
<!--- the frameset holding the mode and bottom frames is closed
<FRAME NAME="PostFrame" SRC="' + formURL + '" MARGINWIDTH="0" MARGINHEIGHT="0" SCROLLING="No" FRAMEBORDER="0" NORESIZE FRAMESPACING="0" BORDER="0">
<!--- the last frame of the first frameset the post frame - it is invisible, i.e. has no height
</FRAMESET>
<!--- close the original frameset.

Notice the following:

Building framesets from scratch and getting them to work is reasonably advanced HTML work - getting them to work inside the viewer.htm file is even more complex.  Not only do you have to get the framesets arranged correctly but you need to insert them into a viewer.htm file with all the Javascript "wrapping" done correctly.

So... it is easier to use other people's work - with their permission of course.

APPROPRIATING AN EXISTING FRAMESET

Let's say you found an ArcIMS website whose layout you really liked and you have gotten the owner's permission to use it.