Monday, November 08, 2010 at 12:03 AM.

system.verbs.builtins.html.data.standardMacros.imageRef

on imageRef (imagespec, explanation=nil, hspace="", align="", usemap="", ismap=false, border=0, pageTable=nil, glossref="", vspace="", lowsrc="", rollsrc="", height="", width="", name="", id="", style="", class="", title="") {
	<<Changes
		<<5/14/10; 10:09:24 AM by DW
			<<Went looking for a bug that might have been showing up in the Tool Catalog page in the OPML Editor, but it probably isn't here. Along the way I reformatted the code to current conventions.
		<<07/05/00; 5:55:33 PM by PBS
			<<Create a default alt attribute if explanation is nil or "". HTML standards require alt attributes for all images.
			<<Put quotes around the values for all attributes.
		<<Wednesday, January 07, 1998 at 4:24:37 PM by PBS
			<<Removed timeModified check.
			<<Added "name" parameter.
		<<Fri, Feb 19, 1999 at 11:55:48 AM by PBS
			<<Added title parameter.
		<<Sunday, January 18, 1998 at 4:06:39 PM by PBS
			<<Call html.getImagePath, a new script which builds relative URLs for images.
		<<Thursday, January 01, 1998 at 12:52:02 PM by PBS
			<<Added vspace, lowscr, and rollsrc parameters.
			<<The rollsrc parameter specifies the image to display during
			<<an on mouseover event.
			<<Made Frontier smarter about writing out changed images.
		<<11/15/97 at 5:59:03 AM by DW
			<<doesn't run off html.data.page, instead it assumes that xxx has been set up.
			<<takes pagetable as an optional param, facilitates debugging, allows calling from outside of html suite.
			<<support for glossary references
	
	local (htmlText = "");
	local (imageTable, heightWidthString = "");
	
	if pageTable == nil {
		pageTable = html.getPageTableAddress ()};
	<<scratchpad.imagerefparams = pagetable^
	
	on add (s) {
		htmlText = htmlText + s};
	
	<<Get image data: url, path, address, mac file type, height, and width.
	imageTable = html.getImageData (imageSpec, pageTable);
	
	bundle { //get height and width of image; build heightWidthString
		if height == "" {
			height = imageTable.height};
		if width == "" {
			width = imageTable.width};
		if height != 0 { //we may have failed to get image size
			heightWidthString = "height=\"" + height + "\" "};
		if width != 0 {
			heightWidthString = heightWidthString + "width=\"" + width + "\""}};
	
	bundle { //build html text
		if name == "" { //optional name parameter
			add ("<img src=\"" + imageTable.url + "\" " + heightWidthString)}
		else {
			add ("<img name=\"" + name + "\" src=\"" + imageTable.url + "\" " + heightWidthString)};
		
		if id != "" {
			add (" id=\"" + id + "\"")};
		if lowsrc != "" {
			local (lowSrcData = html.getImageData (lowsrc, pageTable));
			add (" lowsrc=\"" + lowSrcData.url + "\"")};
		if explanation == nil {
			explanation = nameOf (imageTable.adrImage^) + " picture"};
		if hspace != "" {
			add (" hspace=\"" + hspace + "\"")};
		if vspace != "" {
			add (" vspace=\"" + vspace + "\"")};
		if align != "" {
			add (" align=\"" + align + "\"")};
		if usemap != "" {
			add (" usemap=\"#" + usemap + "\"")};
		if ismap {
			add (" ismap")};
		if rollsrc != "" {
			local (rollData = html.getImageData (rollsrc, pageTable));
			add (" onmouseout=\"this.src='" + imageTable.url + "'\"");
			add (" onmouseover=\"this.src='" + rollData.url + "'\"")};
		if style != "" {
			add (" style=\"" + style + "\"")};
		if class != "" {
			add (" class=\"" + class + "\"")};
		if title != "" {
			add (" title=\"" + title + "\"")};
		add (" alt=\"" + explanation + "\""); //PBS 07/05/00: always add the alt attribute, as it's required by the HTML spec
		add (" border=\"" + border + "\""); <<Wed, Dec 25, 1996 at 7:33:16 AM by DW
		add (">")};
	
	if glossref != "" { //5.0 enclose the imageref in an anchor or glosspatch
		local (s = html.refGlossary (glossref));
		<<assume we have a hard-coded link or a glosspatch
			<<<a href="http://www.scripting.com/frontier/">Frontier</a> or
			<<[[#glossPatch Welcome to Alpha User's Test Page!|websitessamples/randomStuff|]]
		if s beginsWith "[[#" {
			local (ix = string.patternMatch (' ', s));
			s = string.delete (s, 1, ix);
			s = string.nthField (s, '|', 2); <<this is the part we keep
			htmltext = "[[#glossPatch " + htmltext + "|" + s + "|]]"}
		else { <<assume it's an a href
			s = string.nthField (s, '>', 1) + ">"; <<pop off the <a href="xxx"> part
			htmltext = s + htmltext + "</a>"}};
	
	return (htmltext)};
bundle { //test code
	html.setpagetableaddress (@scratchpad.imagerefparams);
	dialog.alert (imageref (@opmleditor.website.["#images"].theopmleditor))}



This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.