| 
									
										
										
										
											2015-06-24 15:36:17 -06:00
										 |  |  | 'use strict'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | module.exports = function (opts) { | 
					
						
							|  |  |  |   var finalhandler = require('finalhandler'); | 
					
						
							|  |  |  |   var serveStatic = require('serve-static'); | 
					
						
							|  |  |  |   var serveIndex = require('serve-index'); | 
					
						
							|  |  |  |   var serve = serveStatic(opts.public); | 
					
						
							|  |  |  |   var index = serveIndex(opts.public); | 
					
						
							| 
									
										
										
										
											2015-06-30 17:11:01 -06:00
										 |  |  |   var content = opts.content; | 
					
						
							| 
									
										
										
										
											2015-06-24 15:36:17 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-07 13:12:46 -06:00
										 |  |  |   function _reloadWrite(data, enc, cb) { | 
					
						
							|  |  |  |     /*jshint validthis: true */ | 
					
						
							|  |  |  |     if (this.headersSent) { | 
					
						
							|  |  |  |       this.__write(data, enc, cb); | 
					
						
							|  |  |  |       return; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (!/html/i.test(this.getHeader('Content-Type'))) { | 
					
						
							|  |  |  |       this.__write(data, enc, cb); | 
					
						
							|  |  |  |       return; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (this.getHeader('Content-Length')) { | 
					
						
							|  |  |  |       this.setHeader('Content-Length', this.getHeader('Content-Length') + this.__my_addLen); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     this.__write(this.__my_livereload); | 
					
						
							|  |  |  |     this.__write(data, enc, cb); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-24 15:36:17 -06:00
										 |  |  |   return function (req, res) { | 
					
						
							| 
									
										
										
										
											2015-06-30 17:11:01 -06:00
										 |  |  |     if (content && '/' === req.url) { | 
					
						
							|  |  |  |       // res.setHeader('Content-Type', 'application/octet-stream');
 | 
					
						
							|  |  |  |       res.end(content); | 
					
						
							|  |  |  |       return; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2015-06-24 15:36:17 -06:00
										 |  |  |     var done = finalhandler(req, res); | 
					
						
							| 
									
										
										
										
											2015-12-05 22:43:33 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     if (opts.livereload) { | 
					
						
							| 
									
										
										
										
											2016-10-07 13:12:46 -06:00
										 |  |  |       res.__my_livereload = '<script src="//' | 
					
						
							| 
									
										
										
										
											2015-12-05 22:43:33 -08:00
										 |  |  |         + (res.getHeader('Host') || opts.servername).split(':')[0] | 
					
						
							|  |  |  |         + ':35729/livereload.js?snipver=1"></script>'; | 
					
						
							| 
									
										
										
										
											2016-10-07 13:12:46 -06:00
										 |  |  |       res.__my_addLen = res.__my_livereload.length; | 
					
						
							| 
									
										
										
										
											2015-12-05 22:43:33 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-07 13:12:46 -06:00
										 |  |  |       // TODO modify prototype instead of each instance?
 | 
					
						
							|  |  |  |       res.__write = res.write; | 
					
						
							|  |  |  |       res.write = _reloadWrite; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2016-08-06 14:15:12 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  |     function serveStatic() { | 
					
						
							|  |  |  |       serve(req, res, function (err) { | 
					
						
							| 
									
										
										
										
											2016-08-06 12:34:15 -06:00
										 |  |  |         if (err) { return done(err); } | 
					
						
							| 
									
										
										
										
											2016-08-06 14:15:12 -06:00
										 |  |  |         index(req, res, done); | 
					
						
							| 
									
										
										
										
											2016-08-06 12:34:15 -06:00
										 |  |  |       }); | 
					
						
							| 
									
										
										
										
											2016-08-06 14:15:12 -06:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (opts.expressApp) { | 
					
						
							|  |  |  |       opts.expressApp(req, res, serveStatic); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     else { | 
					
						
							|  |  |  |       serveStatic(); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2015-06-24 15:36:17 -06:00
										 |  |  |   }; | 
					
						
							|  |  |  | }; |