<* PRAGMA LL *>A
WebVBT is a VBT class for displaying a page on the Web.
INTERFACEThe methodWebVBT ; IMPORT HTML, HTMLVBT, TextEditVBT, TextList, PixmapVBT, VBT, Web; CONST DefaultURL = "http://www.research.digital.com/SRC/home.html"; TYPE T <: Public; Private <: VBT.T; Public = Private OBJECT <* LL = VBT.mu *> url : TEXT := NIL; page: Page := NIL; METHODS <* LL <= VBT.mu *> init (): T; <* LL = VBT.mu *> fetch (url : TEXT := DefaultURL; style : Style := Style.Normal; zippers : BOOLEAN := FALSE; reload : BOOLEAN := FALSE; server : Web.T := NIL; scrollBar: BOOLEAN := TRUE); fromText (contents : TEXT; contentType : Web.MIMEType := Web.MIMEType.Text; contentSubType: TEXT := "html"; url : TEXT := "text:"; style : Style := Style.Normal; zippers : BOOLEAN := FALSE; reload : BOOLEAN := FALSE; server : Web.T := NIL; scrollBar : BOOLEAN := TRUE); stop (); getLinks(): TextList.T; search(pattern: TEXT): BOOLEAN; (* the following are intended to be overridden by clients: *) ready (remImages: CARDINAL); hotlink (link: TEXT; READONLY cd: VBT.MouseRec); ismap (link: TEXT; READONLY cd: VBT.MouseRec); isindex (typein: TEXT); form (); END; Style = {Ugly (* text-only, fixed font *), NoImages (* multiple fonts, but no images *), Normal (* multiple fonts, images fetched before anything displayed *), Background (* images are fetched and displayed in the background *) };
v.init() initializes v as a WebVBT.T and displays
nothing.
The method v.fetch(url, style, reload, server) (eventually) displays
the contents of url. More precisely, v.fetch cancels any fetching
in progress and then forks a thread to actually retrieve the contents of
url, passing to Web.Fetch the reload and server arguments.
After the contents of url are fetched (and, in the case of an HTML
page, also parsed), the following events take place atomically locked by
VBT.mu: the url and page fields are set, the VBT displaying the
url (i.e., page.vbt) is updated, and the v.ready(0) method is
invoked.
Almost. When fetch is called with style=Background, the ready
method is called before any images are fetched. The parameter to
ready is the number of images remaining to be fetched; the ready
method will be called repeatedly, each time that an image is fetched.
Not quite. The style parameter given to the fetch method allows 4
different styles of fetching: When style=Ugly, a page is displayed
with no graphics, using a single font. This is pretty ugly, but it's
probably fast. For all other styles, the page is displayed using
multiple fonts. When style=NoImages, no attempt is made to display
images; the textual alt field is displayed, if one is given in the
html. When style=Normal (the default), images are fetched (using the
reload and server arguments passed to fetch) and displayed before
the page is displayed. Finally, when style=Background, the page is
displayed before all the images have been retrieved. As images are
retrieved, v.ready(ct) is called repeatedly, with ct set to the
number of images left to retrieve.
The method v.stop() is used to cancel any previous call to v.fetch
that has not yet caused v.ready(0) to be called.
The ready method is called after a URL fetched by a call to
v.fetch(...) has been fetched and displayed. As described above, when
fetch is called with style equal to Ugly, NoImages, or Normal,
v.ready(0) is simply called. However, if fetch is called with
style equal to Background, the ready method is called repeatedly,
with a descreasing number. The ready method is not called if the call
to fetch was pre-empted by another call to fetch or the call was
stopped by a call to v.stop(). The default ready method is a noop.
The method v.getLinks returns a list of URLs contained in v. This
list is NIL if v is not an HTML page or if fetching v is still
pending.
The method v.search(pattern) returns whether pattern appears in the
text displayed by v. The search is case-insensitive.
The method v.hotlink(link, cd) is called whenever the user has clicked
on a link in an HTML page. The default hotlink method is a noop.
TYPE
Page = Web.Page OBJECT END;
TextPage = Page OBJECT
vbt: TextEditVBT.T
END;
HTMLPage = Page OBJECT
html: HTML.T;
vbt: HTMLVBT.T;
END;
ImagePage = Page OBJECT
vbt: PixmapVBT.T;
END;
END WebVBT.