1 |
|
2 | (function() {
|
3 | var WebSocket = window.WebSocket || window.MozWebSocket;
|
4 | var br = window.brunch = (window.brunch || {});
|
5 | var ar = br['auto-reload'] = (br['auto-reload'] || {});
|
6 | if (!WebSocket || ar.disabled) return;
|
7 |
|
8 | var cacheBuster = function(url){
|
9 | var date = Math.round(Date.now() / 1000).toString();
|
10 | url = url.replace(/(\&|\\?)cacheBuster=\d*/, '');
|
11 | return url + (url.indexOf('?') >= 0 ? '&' : '?') +'cacheBuster=' + date;
|
12 | };
|
13 |
|
14 | var browser = navigator.userAgent.toLowerCase();
|
15 | var forceRepaint = ar.forceRepaint || browser.indexOf('chrome') > -1;
|
16 |
|
17 | var reloaders = {
|
18 | page: function(){
|
19 | window.location.reload(true);
|
20 | },
|
21 |
|
22 | stylesheet: function(){
|
23 | [].slice
|
24 | .call(document.querySelectorAll('link[rel=stylesheet]'))
|
25 | .filter(function(link) {
|
26 | var val = link.getAttribute('data-autoreload');
|
27 | return link.href && val != 'false';
|
28 | })
|
29 | .forEach(function(link) {
|
30 | link.href = cacheBuster(link.href);
|
31 | });
|
32 |
|
33 |
|
34 | if (forceRepaint) setTimeout(function() { document.body.offsetHeight; }, 25);
|
35 | },
|
36 |
|
37 | javascript: function(){
|
38 | var scripts = [].slice.call(document.querySelectorAll('script'));
|
39 | var textScripts = scripts.map(function(script) { return script.text }).filter(function(text) { return text.length > 0 });
|
40 | var srcScripts = scripts.filter(function(script) { return script.src });
|
41 |
|
42 | var loaded = 0;
|
43 | var all = srcScripts.length;
|
44 | var onLoad = function() {
|
45 | loaded = loaded + 1;
|
46 | if (loaded === all) {
|
47 | if (typeof require === 'object' && require.reset) require.reset();
|
48 | textScripts.forEach(function(script) { eval(script); });
|
49 | }
|
50 | }
|
51 |
|
52 | srcScripts
|
53 | .forEach(function(script) {
|
54 | var src = script.src;
|
55 | script.remove();
|
56 | var newScript = document.createElement('script');
|
57 | newScript.src = cacheBuster(src);
|
58 | newScript.async = true;
|
59 | newScript.onload = onLoad;
|
60 | document.head.appendChild(newScript);
|
61 | });
|
62 | }
|
63 | };
|
64 | var port = ar.port || 9485;
|
65 | var host = br.server || window.location.hostname || 'localhost';
|
66 |
|
67 | var connect = function(){
|
68 | var connection = new WebSocket('ws://' + host + ':' + port);
|
69 | connection.onmessage = function(event){
|
70 | if (ar.disabled) return;
|
71 | var message = event.data;
|
72 | var reloader = reloaders[message] || reloaders.page;
|
73 | reloader();
|
74 | };
|
75 | connection.onerror = function(){
|
76 | if (connection.readyState) connection.close();
|
77 | };
|
78 | connection.onclose = function(){
|
79 | window.setTimeout(connect, 1000);
|
80 | };
|
81 | };
|
82 | connect();
|
83 | })();
|
84 |
|