1 | 'use strict';
|
2 |
|
3 | var Promise = require('bluebird');
|
4 | var browserSync = require('browser-sync');
|
5 | var onHeaders = require('on-headers');
|
6 | var injector = require('connect-injector');
|
7 |
|
8 | function noop(){}
|
9 |
|
10 | module.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 |
|
25 | if (timer) clearTimeout(timer);
|
26 |
|
27 |
|
28 | queue.push(path);
|
29 |
|
30 |
|
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 |
|
51 | function 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 |