diff --git a/engine/src/flutter/examples/file-browser.sky b/engine/src/flutter/examples/file-browser.sky
new file mode 100644
index 0000000000..6d02f84839
--- /dev/null
+++ b/engine/src/flutter/examples/file-browser.sky
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+ File browser for {{ url }}
+
+ {{ directory }}
+
+
+ {{ file }}
+
+
+
diff --git a/engine/src/flutter/tools/sky_server b/engine/src/flutter/tools/sky_server
index 0fe0fe91ff..da42f1acf3 100755
--- a/engine/src/flutter/tools/sky_server
+++ b/engine/src/flutter/tools/sky_server
@@ -4,8 +4,9 @@
# found in the LICENSE file.
import argparse
-import os
import cherrypy
+import json
+import os
import staticdirindex
@@ -17,29 +18,23 @@ SKY_ROOT = os.path.join(SRC_ROOT, 'sky')
GEN_ROOT = os.path.join(SRC_ROOT, BUILD_DIRECTORY, CONFIG_DIRECTORY, 'gen')
-# FIXME: This should be replaced by just json and inflated into DOM client-side.
def skydir(section="", dir="", path="", **kwargs):
- url = "%s%s" % (cherrypy.request.headers.get('Host', ''),
- cherrypy.request.path_info)
- sky = "
"
- sky += ""
- sky += ''
+ if cherrypy.request.params.get('format') is None:
+ return ''
+ result = dict()
+ result['directories'] = []
+ result['files'] = []
for _, dir_names, file_names in os.walk(path.rstrip(r"\/")):
for dir_name in sorted(dir_names):
- sky += "%s/\n" % (dir_name, dir_name)
+ result["directories"].append(dir_name)
del dir_names[:] # limit to one level
for file_name in sorted(file_names):
- sky += "%s\n" % (file_name, file_name)
- return sky + ""
+ result["files"].append(file_name)
+ return json.dumps(result)
-# FIXME: This doesn't yet support directory listings. We'll do something like:
-# http://tools.cherrypy.org/wiki/staticdirindex
-# but have it spit .sky instead of HTML
-
def main():
parser = argparse.ArgumentParser(description='Sky development server')
parser.add_argument('-v', '--verbose', action='store_true',