-- <<<- global theFinderDialogPage := object (WebPage) title: "Finder" base: theSXPrefix contents object (WebHeading) level: 1 contents "Finder" end object (WebMacro) func: (self stream props -> local dirName := props[@dir] if (dirName == empty) do (dirName := "/") local dir := empty guard ( dir := spawn theRootDir dirName ) catching all: caught ok end if (dir == empty) then ( return ("Unknown directory: " + (dirName as String)) ) else ( if (dir == theRootDir) then ( dirName := "/" ) else ( dirName := "/" + (dir as String) ) local parent := parentDir dir local parentName := undefined if (parent == theRootDir) then ( parentName := "/" ) else ( parentName := ("/" + (parent as String)) ) local fileList := new WebBulletedList local fileNames := getContents dir forEach fileNames (fileName xxx -> local link if (isDir dir fileName) then ( link := object (WebLink) url: (printAnchorProps \ undefined props \ dir: (dirName + fileName)) contents object (WebBold) contents fileName end end ) else ( link := object (WebLink) url: (printAnchorProps \ undefined props \ dialog: "Importer" \ dir: dirName \ file: fileName) contents fileName end ) append FileList link ) ok object (WebGroup) contents object (WebHeading) level: 2 contents "Directory: " dirName end object (WebHeading) level: 2 contents "Parent: " object (WebLink) url: (printAnchorProps \ undefined props \ dir: parentName) contents parentName end end "Contains " ((size FileList) as String) " children:" fileList end ) ) end end registerService theWebServer \ (new WebService \ name: "Finder" \ about: "Browse the file system!" \ handler: (service request params -> printHTML theFinderDialogPage (new String) #( @dialog: "Finder", @dir: ("/" + (theStartDir as String))))) registerDialog theWebServer \ (new WebDialog \ name: "Finder" \ handler: (dialog props params -> printHTML theFinderDialogPage (new String) props)) global theImporterDialogPage := object (WebPage) title: "Importer" base: theSXPrefix contents object (WebHeading) level: 1 contents "Importer" end object (WebMacro) func: (self stream props -> local dirName := props[@dir] local fileName := props[@file] local dir := empty guard ( dir := spawn theRootDir dirName ) catching all: caught ok end if (dir == empty) then ( return ("Unknown directory: " + (dirName as String)) ) else ( object (WebGroup) contents object (WebHeading) level: 2 contents "Directory: " object (WebLink) url: (printAnchorProps \ undefined props \ dialog: "Finder" \ dir: dirName) contents dirName end end object (WebHeading) level: 2 contents "File: " fileName end end ) ) end end registerDialog theWebServer \ (new WebDialog \ name: "Importer" \ handler: (dialog props params -> printHTML theImporterDialogPage (new String) props)) -- >>>