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

on viewInBrowser (adr = nil) {
	<<Change Notes
		<<Fri, Jul 7, 2000 at 11:00:09 PM by AR
			<<Call any scripts in user.pike.commandCallbacks.viewInBrowser
			<<If one of the scripts returns true, we're done
		<<Sat, Aug 26, 2000 at 6:10:27 PM by JES
			<<Use the website framework to preview weblog pages
		<<10/02/00; 12:17:32 PM by PBS
			<<Callbacks can be addresses.
		<<11/30/00; 12:18:18 AM by JES
			<<Dereference callback addresses in a try block in case a tool's odb is not opened
		<<12/14/00; 12:18:27 AM by PBS
			<<View local, file-based outlines in the browser.
		<<12/29/00; 3:39:07 PM by JES
			<<View object database outlines in the browser.
		<<05/2501; 10:33:51 PM by JES
			<<Optimization: Don't save Manila site outlines, unless they've been modified.
	if adr == nil { //default to the front window
		try {adr = table.getCursorAddress ()}};
	bundle { //run callbacks
		on runCallbacks (adrtable) {
			local (flConsumed = false);
			if defined (adrtable^) {
				local (adrcallback);
				for adrcallback in adrtable {
					try { //11/30/00 JES
						while typeOf (adrcallback^) == addressType {
							adrcallback = adrcallback^};
						flConsumed = adrcallback^ (adr)};
					if flConsumed {
						return (true)}}};
			return (false)};
		if runCallbacks ( {
			return (true)};
		if system.environment.isRadio {
			if defined (user.pike.commandCallbacks.viewInBrowser) {
				if runCallbacks (@user.pike.commandCallbacks.viewInBrowser) {
					return (true)}}}};
	local (adrType);
	bundle { //if there's a windowType that handles this command, call it
		if (adradrtable:@adrtype, adrwindow:adr) {
			if defined (adrtype^.viewInBrowser) {
				if adrtype^.viewInBrowser (adr) {
					return (false)}}}};
	if adr != nil { //do default behavior
		local (f);
		if (adr, @f, true) {
			webBrowser.openDocument (f);
			webBrowser.bringToFront ();
			return (true)}};
	return (false)};

<<bundle // debugging
	<<viewInBrowser (window.frontmost ())

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.