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


on releaseRenderedPage (adrObject = table.getCursorAddress ()) {
	<<Changes notes:
		<<Allow binary items in any table -- images, for example -- to be published.
		<<Tue, Aug 11, 1998 at 8:50:23 PM by PBS
	local (flShiftKey = kb.shiftKey ()); //sample it before we build the page
	local (s, adrPageTable = @websites.["#data"], url);
	local (flDisplayEachRendering = false);
	bundle { //Don't publish certain objects as pages. PBS 5/3/98
		on noPageError () {
			dialog.alert ("Can't publish \"" + nameOf (adrObject^) + "\" because it's not a page.")};
		on checkParent (adr) {
			<<Check if this object is enclosed by a table whose name begins with #
				<<If so, this isn't a page, but a tool, glossary item, filter, or ftpSite element.
			local (nomad = adr);
			loop {
				if nomad == nil or nomad == @root {
				if nameOf (nomad^) beginsWith "#" {
					return (false)};
				nomad = parentOf (nomad^)};
			return (true)};
		if typeOf (adrObject^) != binaryType {
			case true {
				adrObject == nil; //no page is selected
				typeOf (adrObject^) == unknownType; //it's an object with no type or content
				checkParent (adrObject) == false { //it's a #template or #prefs table, etc.
					noPageError ();
					return (false)}}}};
	on buildPage (templateName=nil) {
		local (flDisplay = true);
		<<Call file writer startup script.
			<<Tuesday, April 14, 1998 at 3:41:48 PM by PBS
		html.callFileWriterStartup (adrObject, adrPageTable, templateName);
		<<Build the page.
		s = html.buildObject (adrObject, adrPageTable, templateName);
		<<Write the page to disk (or upload via ftp, etc.)
		html.ftpText (s, adrPageTable);
		<<Call file writer shutdown script.
		html.callFileWriterShutdown (adrObject, adrPageTable, templateName);
		<<Should this page be displayed in the browser?
		if templateName != nil {
			if not flDisplayEachRendering {
				flDisplay = false}};
		<<Show in browser.
		if flDisplay {
			if (string.lower (adrPageTable^.fileWriter) == "file") and (not flShiftKey) {
				webBrowser.openDocument (adrPageTable^.f)}
			else {
				webBrowser.openURL (adrPageTable^.url)};
			if user.webBrowser.bringToFrontOnPreview {
				webBrowser.bringToFront ()}}};
	bundle { //are there additional templates that should be used?
		local (templateList = html.getExtraTemplates (adrObject));
		if templateList {
			<<Get the displayEachRendering pref.
			flDisplayEachRendering = html.getPagePref ("displayEachRendering", parentOf (adrObject^), adrPageTable);
			<<Loop through list of templates.
			local (i);
			for i = 1 to sizeOf (templateList) {
				buildPage (templateList [i])}}};
	buildPage (); //build page with default template last
	return (true)}

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.