Property definitions

popcorn $ StaticHandler :: defaultinit
# Static files server.
#
# To serve static files such as images, CSS files, and JavaScript files, use the
# Popcorn built-in handler `StaticHandler`.
#
# Pass the name of the directory that contains the static assets to the StaticHandler
# init method to start serving the files directly.
# For example, use the following code to serve images, CSS files, and JavaScript files
# in a directory named `public`:
#
# ~~~
# var app = new App
# app.use("/", new StaticHandler("public/"))
# ~~~
#
# Now, you can load the files that are in the `public` directory:
#
# ~~~raw
# http://localhost:3000/images/trollface.jpg
# http://localhost:3000/css/style.css
# http://localhost:3000/js/app.js
# http://localhost:3000/hello.html
# ~~~
#
# Popcorn looks up the files relative to the static directory, so the name of the
# static directory is not part of the URL.
# To use multiple static assets directories, add the `StaticHandler` multiple times:
#
# ~~~
# app.use("/", new StaticHandler("public/"))
# app.use("/", new StaticHandler("files/"))
# ~~~
#
# Popcorn looks up the files in the order in which you set the static directories
# with the `use` method.
#
# To create a virtual path prefix (where the path does not actually exist in the file system)
# for files that are served by the `StaticHandler`, specify a mount path for the
# static directory, as shown below:
#
# ~~~
# app.use("/static/", new StaticHandler("public/"))
# ~~~
#
# Now, you can load the files that are in the public directory from the `/static`
# path prefix.
#
# ~~~raw
# http://localhost:3000/static/images/trollface.jpg
# http://localhost:3000/static/css/style.css
# http://localhost:3000/static/js/app.js
# http://localhost:3000/static/hello.html
# ~~~
#
# However, the path that you provide to the `StaticHandler` is relative to the
# directory from where you launch your app.
# If you run the app from another directory, it’s safer to use the absolute path of
# the directory that you want to serve.
class StaticHandler
	super Handler

	# Static files directory to serve.
	var static_dir: String

	# Default file to serve if nothing matches the request.
	#
	# `null` for no default file.
	var default_file: nullable String

	# Internal file server used to lookup and render files.
	var file_server: FileServer is lazy do
		var srv = new FileServer(static_dir)
		srv.show_directory_listing = false
		srv.default_file = default_file
		return srv
	end

	redef fun handle(route, uri, req, res) do
		var answer = file_server.answer(req, route.uri_root(uri))
		if answer.status_code == 200 then
			res.status_code = answer.status_code
			res.header.add_all answer.header
			res.files.add_all answer.files
			res.send
		else if answer.status_code != 404 then
			res.status_code = answer.status_code
		end
	end
end
lib/popcorn/pop_handlers.nit:174,1--262,3