| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 part of http_server; | 5 part of http_server; |
| 6 | 6 |
| 7 | 7 |
| 8 // Used for signal a directory redirecting, where a tailing slash is missing. | 8 // Used for signal a directory redirecting, where a tailing slash is missing. |
| 9 class _DirectoryRedirect { | 9 class _DirectoryRedirect { |
| 10 const _DirectoryRedirect(); | 10 const _DirectoryRedirect(); |
| (...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 279 if (server == null) server = ""; | 279 if (server == null) server = ""; |
| 280 var footer = | 280 var footer = |
| 281 '''</table> | 281 '''</table> |
| 282 $server | 282 $server |
| 283 </body> | 283 </body> |
| 284 </html> | 284 </html> |
| 285 '''; | 285 '''; |
| 286 | 286 |
| 287 response.write(header); | 287 response.write(header); |
| 288 | 288 |
| 289 void add(String name, String modified, var size) { | 289 void add(String name, String modified, var size, bool folder) { |
| 290 try { | |
| 291 if (size == null) size = "-"; | 290 if (size == null) size = "-"; |
| 292 if (modified == null) modified = ""; | 291 if (modified == null) modified = ""; |
| 293 var encodedSize = new HtmlEscape().convert(size.toString()); | 292 var encodedSize = new HtmlEscape().convert(size.toString()); |
| 294 var encodedModified = new HtmlEscape().convert(modified); | 293 var encodedModified = new HtmlEscape().convert(modified); |
| 295 var encodedLink = new HtmlEscape(HtmlEscapeMode.ATTRIBUTE) | 294 var encodedLink = new HtmlEscape(HtmlEscapeMode.ATTRIBUTE) |
| 296 .convert(Uri.encodeComponent(normalize(join(path, name)))); | 295 .convert(Uri.encodeComponent(name)); |
| 296 if (folder) { |
| 297 encodedLink += '/'; |
| 298 name += '/'; |
| 299 } |
| 297 var encodedName = new HtmlEscape().convert(name); | 300 var encodedName = new HtmlEscape().convert(name); |
| 298 | 301 |
| 299 var entry = | 302 var entry = |
| 300 ''' <tr> | 303 ''' <tr> |
| 301 <td><a href="$encodedLink">$encodedName</a></td> | 304 <td><a href="$encodedLink">$encodedName</a></td> |
| 302 <td>$encodedModified</td> | 305 <td>$encodedModified</td> |
| 303 <td style="text-align: right">$encodedSize</td> | 306 <td style="text-align: right">$encodedSize</td> |
| 304 </tr>'''; | 307 </tr>'''; |
| 305 response.write(entry); | 308 response.write(entry); |
| 306 } catch (e) { | |
| 307 print(e); | |
| 308 } | |
| 309 } | 309 } |
| 310 | 310 |
| 311 if (path != '/') { | 311 if (path != '/') { |
| 312 add('../', null, null); | 312 add('..', null, null, true); |
| 313 } | 313 } |
| 314 | 314 |
| 315 dir.list(followLinks: true).listen((entity) { | 315 dir.list(followLinks: true).listen((entity) { |
| 316 var name = basename(entity.path); |
| 317 var stat = entity.statSync(); |
| 316 if (entity is File) { | 318 if (entity is File) { |
| 317 var stat = entity.statSync(); | 319 add(name, |
| 318 add(basename(entity.path), | |
| 319 stat.modified.toString(), | 320 stat.modified.toString(), |
| 320 stat.size); | 321 stat.size, |
| 322 false); |
| 321 } else if (entity is Directory) { | 323 } else if (entity is Directory) { |
| 322 add(basename(entity.path) + '/', | 324 add(name, |
| 323 entity.statSync().modified.toString(), | 325 stat.modified.toString(), |
| 324 null); | 326 null, |
| 327 true); |
| 325 } | 328 } |
| 326 }, onError: (e) { | 329 }, onError: (e) { |
| 327 // TODO(kevmoo): log error | 330 // TODO(kevmoo): log error |
| 328 }, onDone: () { | 331 }, onDone: () { |
| 329 response.write(footer); | 332 response.write(footer); |
| 330 response.close(); | 333 response.close(); |
| 331 }); | 334 }); |
| 332 }, onError: (e) { | 335 }, onError: (e) { |
| 333 // TODO(kevmoo): log error | 336 // TODO(kevmoo): log error |
| 334 response.close(); | 337 response.close(); |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 417 | 420 |
| 418 Future close() => new Future.value(); | 421 Future close() => new Future.value(); |
| 419 | 422 |
| 420 void setMimeType(List<int> bytes) { | 423 void setMimeType(List<int> bytes) { |
| 421 var mimeType = lookupMimeType(path, headerBytes: bytes); | 424 var mimeType = lookupMimeType(path, headerBytes: bytes); |
| 422 if (mimeType != null) { | 425 if (mimeType != null) { |
| 423 response.headers.contentType = ContentType.parse(mimeType); | 426 response.headers.contentType = ContentType.parse(mimeType); |
| 424 } | 427 } |
| 425 } | 428 } |
| 426 } | 429 } |
| OLD | NEW |