'$Revision:$' ' Copyright 1992-2006 Sun Microsystems, Inc. and Stanford University. See the LICENSE file for license information. ' '-- Module body' 'globals modules' <~ (| { 'ModuleInfo: Module: webserver InitialContents: FollowSlot' webserver = bootstrap define: 'globals modules webserver' ToBe: bootstrap addSlotsTo: ( bootstrap remove: 'directory' From: bootstrap remove: 'fileInTimeString' From: bootstrap remove: 'myComment' From: bootstrap remove: 'postFileIn' From: bootstrap remove: 'revision' From: bootstrap remove: 'subpartNames' From: globals modules init copy ) From: bootstrap setObjectAnnotationOf: 'globals modules webserver' From: ( | {} = 'ModuleInfo: Creator: globals modules webserver. CopyDowns: globals modules init. copy SlotsToOmit: directory fileInTimeString myComment postFileIn revision subpartNames. \x7fIsComplete: '. | ) .} |) 'globals modules webserver' <~ (| { 'ModuleInfo: Module: webserver InitialContents: FollowSlot\x7fVisibility: public' directory <- 'applications'.} { 'ModuleInfo: Module: webserver InitialContents: InitializeToExpression: (_CurrentTimeString)\x7fVisibility: public' fileInTimeString <- _CurrentTimeString.} { 'ModuleInfo: Module: webserver InitialContents: FollowSlot' myComment <- ''.} { 'ModuleInfo: Module: webserver InitialContents: FollowSlot' postFileIn = ( | | resend.postFileIn).} { 'ModuleInfo: Module: webserver InitialContents: FollowSlot\x7fVisibility: public' revision <- '$Revision:$'.} { 'ModuleInfo: Module: webserver InitialContents: FollowSlot\x7fVisibility: private' subpartNames <- ''.} |) 'globals' <~ (| { 'Category: applications\x7fModuleInfo: Module: webserver InitialContents: FollowSlot' webserver <- bootstrap setObjectAnnotationOf: 'globals webserver' From: ( | {} = 'ModuleInfo: Creator: globals webserver. '. | ) .} |) 'globals webserver' <~ (| { 'ModuleInfo: Module: webserver InitialContents: FollowSlot' about = bootstrap setObjectAnnotationOf: 'globals webserver about' From: ( | {} = 'ModuleInfo: Creator: globals webserver about. '. | ) .} |) 'globals webserver about' <~ (| { 'ModuleInfo: Module: webserver InitialContents: FollowSlot' help = ' This is the webserver for Self 4.3. Register a servlet then start up. As an example webserver registerServlet: (webserver exampleServlets fileServlet copy) at: . webserver start. fileServlet has a baseDirectory you may wish to set. When finished, webserver stop. '.} { 'ModuleInfo: Module: webserver InitialContents: FollowSlot' shortName = 'A Self Webserver'.} { 'ModuleInfo: Module: webserver InitialContents: FollowSlot' version = 1.} |) 'globals webserver' <~ (| { 'ModuleInfo: Module: webserver InitialContents: FollowSlot' deregisterServletAt: u = ( | | private removeServletAt: s).} { 'ModuleInfo: Module: webserver InitialContents: FollowSlot' exampleServlets = bootstrap setObjectAnnotationOf: 'globals webserver exampleServlets' From: ( | {} = 'ModuleInfo: Creator: globals webserver exampleServlets. '. | ) .} |) 'globals webserver exampleServlets' <~ (| { 'ModuleInfo: Module: webserver InitialContents: FollowSlot' fileServlet = bootstrap setObjectAnnotationOf: 'globals webserver exampleServlets fileServlet' From: ( | {} = 'ModuleInfo: Creator: globals webserver exampleServlets fileServlet. '. | ) .} |) 'globals webserver exampleServlets fileServlet' <~ (| { 'ModuleInfo: Module: webserver InitialContents: InitializeToExpression: (\'~/Sites/\')' baseDirectory <- '~/Sites/'.} { 'ModuleInfo: Module: webserver InitialContents: FollowSlot' handleUrl: u = ( | f. fn. | (u = '') ifTrue: [fn: 'index.html'] IfFalse: [fn: u]. (fn last = '/') ifTrue: [fn: fn, 'index.html']. fn: baseDirectory, fn. f: os_file deadCopy openForReading: fn IfFail: [^ 'Not Found:', fn]. f contents).} { 'ModuleInfo: Module: webserver InitialContents: FollowSlot' parent* = 'traits clonable'.} |) 'globals webserver exampleServlets' <~ (| { 'ModuleInfo: Module: webserver InitialContents: FollowSlot' lobbyBrowserServlet = bootstrap setObjectAnnotationOf: 'globals webserver exampleServlets lobbyBrowserServlet' From: ( | {} = 'ModuleInfo: Creator: globals webserver exampleServlets lobbyBrowserServlet. '. | ) .} |) 'globals webserver exampleServlets lobbyBrowserServlet' <~ (| { 'ModuleInfo: Module: webserver InitialContents: FollowSlot' appropriateSigilFor: slot = ( | | ( slot mirror at: (slot name, ':') IfAbsent: [^ ' = '] ) value = mirrors assignment ifTrue: [^ ' ← ']. ' = ').} { 'ModuleInfo: Module: webserver InitialContents: FollowSlot' getMirrorAtPath: p = ( | o. | o: reflect: lobby. p do: [|:n| o:(o at: n) contents]. o).} { 'ModuleInfo: Module: webserver InitialContents: FollowSlot' handleUrl: u = ( | o. r. t. | u = '' ifTrue: [o: reflect: lobby] False: [ o: getMirrorAtPath: u asTokensSeparatedByCharactersSatisfying: [|:c | c = '/']]. htmlFor: o).} { 'ModuleInfo: Module: webserver InitialContents: FollowSlot' htmlFor: o = ( | r. | r: '
'. r: r, '', (o comment), '
'. r: r, 'CopyDowns: ', (o copyDowns printString), '
'. r: r, 'CreatorPath: ', (o creatorPath printString), '
'. r: r, 'ModuleNames: ', (o moduleNames printString), '
'. r: r, 'Parents: