UNPKG

2.77 kBJavaScriptView Raw
1/* jshint ignore:start */
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 // Hack to force page repaint after 25ms.
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/* jshint ignore:end */