Monday, November 08, 2010 at 12:04 AM.
system.verbs.builtins.radio.callbacks.installTool
on installTool (adrTool) { <<Changes <<12/20/01; 1:03:45 AM by JES <<Use file.writeTextFile instead of file.writeWholeFile to write the Tool's website files to disk. <<11/26/01; 11:14:17 PM by JES <<Possibly install pages from the tool's website into the filesystem. Remove its entry from the websiteFramework responder's docTree table, so the radio responder will handle the hits. local (addressList = string.parseAddress (adrTool)); local (f = addressList [1]); local (cleanName = Frontier.tools.cleanToolName (file.fileFromPath (f))); local (adrsite = @[f].[cleanName + "Website"]); if defined (adrsite^) { //if it doesn't have a website, do nothing if not defined (adrsite^.["#template"]) { //if the website has a template, let the websiteFramework responder take the hits local (pc = file.getPathChar ()); local (folder = user.radio.prefs.wwwfolder + cleanName + pc); bundle { //write a #upstream.xml to the folder, whose type is none local (f = folder + radio.data.fileNames.upstreamFileName); file.sureFilePath (f); file.writeWholeFile (f, "<upstream type=\"none\"/>")}; local (adritem); on installItem (adritem, folder) { local (itemname = nameOf (adritem^)); if not (itemname beginsWith "#") { //a page or a table local (filetext, extension = ".txt"); case typeOf (adritem^) { tableType { local (subfolder = folder + itemname + pc); local (adrsubitem); for adrsubitem in adritem { installItem (adrsubitem, subfolder)}; continue}; scriptType { //make a wrapper file local (adrpage = string.popFileFromAddress (adritem)); filetext = "<%" + adrpage + " ()%>"}; outlineType { //convert to opml filetext = op.outlineToXml (adritem); extension = ".opml"}} else { //coerce to string, and write the file filetext = string (adritem^)}; local (f = folder + itemname + extension); file.sureFilePath (f); file.writeTextFile (f, filetext)}}; for adritem in adrsite { //install the tool's website pages into the www folder installItem (adritem, folder)}; bundle { //delete the entry for the Tool's website in the websiteFramework responder's docTree if defined (user.webserver.responders.websiteFramework.data.docTree.[cleanName]) { delete (@user.webserver.responders.websiteFramework.data.docTree.[cleanName])}}}}; return (true)} //always allow the Tool to be installed <<bundle //testing <<installTool ("Backup:Radio UserLand:Tools:whoIs.root")
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.