refactor 3-more into separate books

This commit is contained in:
Ilya Kantor 2015-02-27 13:21:58 +03:00
parent bd1d5e4305
commit 87639b2740
423 changed files with 9 additions and 9 deletions

View file

@ -0,0 +1,83 @@
var IframeComet = new function() {
var self = this;
var connectTries = 0, reconnectTimer;
var htmlfile; // for ie only
var iframe;
this.onConnected = function() {
connectTries = 0;
clearTimeout(reconnectTimer);
};
this.onMessage = function(message) { /* ... */ };
this.onError = function(err) { /* ... */ };
this.open = function(url) {
connectTries++;
if(connectTries > 3) {
self.onError("Unable to connect");
}
if ("ActiveXObject" in window) { // IE
createActiveXFrame(url);
} else {
createIframe(url);
}
reconnectTimer = setTimeout(function() {
if (!self.isConnected()) {
self.open(url);
}
}, connectTries * 2000);
// в Chrome не срабатывает при обрыве соединения,
// так что используем там другой =) транспорт
iframe.onload = function() {
self.open(url);
};
};
this.isConnected = function() {
return connectTries == 0; // onConnect обнуляет connectTries
}
function cleanIframe() {
if (iframe) {
iframe.src = "javascript:false";
iframe.parentNode.removeChild(iframe); // очистка
}
}
function createIframe(src) {
cleanIframe();
iframe = document.createElement('iframe');
iframe.src = src || 'javascript:false';
iframe.style.display = 'none';
document.body.appendChild(iframe);
}
function createActiveXFrame(src) {
cleanIframe();
if (!htmlfile) {
htmlfile = new ActiveXObject("htmlfile");
htmlfile.open();
htmlfile.write("<html><body></body></html>");
htmlfile.close();
htmlfile.parentWindow.IframeComet = self;
}
src = src || 'javascript:false'; // пустой src
htmlfile.body.insertAdjacentHTML('beforeEnd', "<iframe src='"+src+"'></iframe>");
iframe = htmlfile.body.lastChild; // window in .document.parentWindow
}
}

View file

@ -0,0 +1,27 @@
<!DOCTYPE html>
<html>
<body>
<script src="iframeComet.js"></script>
<button onclick="go()">IframeComet.open("comet");</button>
<div id="showElem"></div>
<script>
IframeComet.onMessage = IframeComet.onError = show;
function show(msg) {
showElem.innerHTML = msg;
}
function go() {
IframeComet.open("comet");
}
</script>
</body>
</html>

View file

@ -0,0 +1,42 @@
var http = require('http');
var url = require('url');
var static = require('node-static');
var file = new static.Server('.', { cache: 0 });
function accept(req, res) {
if (req.url == '/comet') {
res.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});
res.write('<!DOCTYPE HTML><html> \
<head><meta junk="'+new Array(2000).join('*')+'"/> \
<script> \
var i = parent.IframeComet; \
i.onConnected()</script> \
</head><body>');
setInterval(function() {
var now = new Date();
var timeStr = now.getHours()+':'+now.getMinutes()+':'+now.getSeconds();
res.write('<script>i.onMessage("'+timeStr+'")</script>');
}, 1000);
return;
} else {
file.serve(req, res);
}
}
// ------ запустить сервер -------
if (!module.parent) {
http.createServer(accept).listen(8080);
} else {
exports.accept = accept;
}