UNPKG

1.36 kBJavaScriptView Raw
1'use strict';
2
3var Promise = require('bluebird');
4var browserSync = require('browser-sync');
5var onHeaders = require('on-headers');
6var injector = require('connect-injector');
7
8function noop(){}
9
10module.exports = function(app){
11 var self = this;
12
13 return startBroserSync({}).then(function(bs){
14 var snippet = bs.options.get('snippet');
15 var queue = [];
16 var timer;
17
18 function reload(){
19 browserSync.reload(queue);
20 queue.length = 0;
21 }
22
23 function listener(path){
24 // Stop the timer
25 if (timer) clearTimeout(timer);
26
27 // Add data to queue
28 queue.push(path);
29
30 // Start the timer
31 timer = setTimeout(reload, 100);
32 }
33
34 app.use(injector(function(req, res){
35 return ~res.getHeader('Content-Type').indexOf('text/html');
36 }, function(content, req, res, callback){
37 var str = content.toString();
38 var pos = str.lastIndexOf('</body>');
39 if (!~pos) return callback(null, content);
40
41 var result = str.substring(0, pos) + snippet + str.substring(pos);
42 callback(null, result);
43 }));
44
45 self.on('server', function(){
46 self.route.on('update', listener);
47 });
48 });
49};
50
51function startBroserSync(options){
52 return new Promise(function(resolve, reject){
53 browserSync(options, function(err, bs){
54 if (err) return reject(err);
55 resolve(bs);
56 });
57 });
58}
\No newline at end of file