juggernaut 2.0.4 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/VERSION +1 -1
- data/vendor/assets/javascripts/juggernaut.js +6 -3
- data/vendor/assets/javascripts/socket_io.js +84 -587
- metadata +4 -4
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
2.0
|
|
1
|
+
2.1.0
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
// For sprockets:
|
|
2
|
-
//
|
|
3
|
-
//= require json
|
|
4
1
|
//= require socket_io
|
|
5
2
|
|
|
6
3
|
var Juggernaut = function(options){
|
|
@@ -137,3 +134,9 @@ Juggernaut.Message.prototype.toJSON = function(){
|
|
|
137
134
|
}
|
|
138
135
|
return(JSON.stringify(object));
|
|
139
136
|
};
|
|
137
|
+
|
|
138
|
+
if (typeof module != "undefined") {
|
|
139
|
+
module.exports = Juggernaut;
|
|
140
|
+
} else {
|
|
141
|
+
window.Juggernaut = Juggernaut;
|
|
142
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! Socket.IO.js build:0.8.
|
|
1
|
+
/*! Socket.IO.js build:0.8.6, development. Copyright(c) 2011 LearnBoost <dev@learnboost.com> MIT Licensed */
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* socket.io
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* MIT Licensed
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
(function (exports) {
|
|
9
|
+
(function (exports, global) {
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* IO namespace.
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
* @api public
|
|
23
23
|
*/
|
|
24
24
|
|
|
25
|
-
io.version = '0.8.
|
|
25
|
+
io.version = '0.8.6';
|
|
26
26
|
|
|
27
27
|
/**
|
|
28
28
|
* Protocol implemented.
|
|
@@ -69,10 +69,11 @@
|
|
|
69
69
|
, uuri
|
|
70
70
|
, socket;
|
|
71
71
|
|
|
72
|
-
if (
|
|
73
|
-
uri.protocol = uri.protocol ||
|
|
74
|
-
uri.host = uri.host || document
|
|
75
|
-
|
|
72
|
+
if (global && global.location) {
|
|
73
|
+
uri.protocol = uri.protocol || global.location.protocol.slice(0, -1);
|
|
74
|
+
uri.host = uri.host || (global.document
|
|
75
|
+
? global.document.domain : global.location.hostname);
|
|
76
|
+
uri.port = uri.port || global.location.port;
|
|
76
77
|
}
|
|
77
78
|
|
|
78
79
|
uuri = io.util.uniqueUri(uri);
|
|
@@ -100,7 +101,7 @@
|
|
|
100
101
|
return socket.of(uri.path.length > 1 ? uri.path : '');
|
|
101
102
|
};
|
|
102
103
|
|
|
103
|
-
})('object' === typeof module ? module.exports : (
|
|
104
|
+
})('object' === typeof module ? module.exports : (this.io = {}), this);
|
|
104
105
|
|
|
105
106
|
/**
|
|
106
107
|
* socket.io
|
|
@@ -259,20 +260,18 @@
|
|
|
259
260
|
|
|
260
261
|
util.request = function (xdomain) {
|
|
261
262
|
|
|
262
|
-
if ('undefined' != typeof
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
}
|
|
263
|
+
if (xdomain && 'undefined' != typeof XDomainRequest) {
|
|
264
|
+
return new XDomainRequest();
|
|
265
|
+
}
|
|
266
266
|
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
267
|
+
if ('undefined' != typeof XMLHttpRequest && (!xdomain || util.ua.hasCORS)) {
|
|
268
|
+
return new XMLHttpRequest();
|
|
269
|
+
}
|
|
270
270
|
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
}
|
|
271
|
+
if (!xdomain) {
|
|
272
|
+
try {
|
|
273
|
+
return new ActiveXObject('Microsoft.XMLHTTP');
|
|
274
|
+
} catch(e) { }
|
|
276
275
|
}
|
|
277
276
|
|
|
278
277
|
return null;
|
|
@@ -303,7 +302,7 @@
|
|
|
303
302
|
*/
|
|
304
303
|
|
|
305
304
|
util.defer = function (fn) {
|
|
306
|
-
if (!util.ua.webkit) {
|
|
305
|
+
if (!util.ua.webkit || 'undefined' != typeof importScripts) {
|
|
307
306
|
return fn();
|
|
308
307
|
}
|
|
309
308
|
|
|
@@ -405,7 +404,7 @@
|
|
|
405
404
|
}
|
|
406
405
|
|
|
407
406
|
for (var j = arr.length, i = i < 0 ? i + j < 0 ? 0 : i + j : i || 0;
|
|
408
|
-
i < j && arr[i] !== o; i++)
|
|
407
|
+
i < j && arr[i] !== o; i++) {}
|
|
409
408
|
|
|
410
409
|
return j <= i ? -1 : i;
|
|
411
410
|
};
|
|
@@ -439,8 +438,7 @@
|
|
|
439
438
|
* @api public
|
|
440
439
|
*/
|
|
441
440
|
|
|
442
|
-
util.ua.hasCORS = 'undefined' != typeof
|
|
443
|
-
(function () {
|
|
441
|
+
util.ua.hasCORS = 'undefined' != typeof XMLHttpRequest && (function () {
|
|
444
442
|
try {
|
|
445
443
|
var a = new XMLHttpRequest();
|
|
446
444
|
} catch (e) {
|
|
@@ -459,10 +457,7 @@
|
|
|
459
457
|
util.ua.webkit = 'undefined' != typeof navigator
|
|
460
458
|
&& /webkit/i.test(navigator.userAgent);
|
|
461
459
|
|
|
462
|
-
})(
|
|
463
|
-
'undefined' != typeof window ? io : module.exports
|
|
464
|
-
, this
|
|
465
|
-
);
|
|
460
|
+
})('undefined' != typeof io ? io : module.exports, this);
|
|
466
461
|
|
|
467
462
|
/**
|
|
468
463
|
* socket.io
|
|
@@ -1231,7 +1226,6 @@
|
|
|
1231
1226
|
'undefined' != typeof io ? io : module.exports
|
|
1232
1227
|
, 'undefined' != typeof io ? io : module.parent.exports
|
|
1233
1228
|
);
|
|
1234
|
-
|
|
1235
1229
|
/**
|
|
1236
1230
|
* socket.io
|
|
1237
1231
|
* Copyright(c) 2011 LearnBoost <dev@learnboost.com>
|
|
@@ -1275,7 +1269,13 @@
|
|
|
1275
1269
|
|
|
1276
1270
|
Transport.prototype.onData = function (data) {
|
|
1277
1271
|
this.clearCloseTimeout();
|
|
1278
|
-
|
|
1272
|
+
|
|
1273
|
+
// If the connection in currently open (or in a reopening state) reset the close
|
|
1274
|
+
// timeout since we have just received data. This check is necessary so
|
|
1275
|
+
// that we don't reset the timeout on an explicitly disconnected connection.
|
|
1276
|
+
if (this.connected || this.connecting || this.reconnecting) {
|
|
1277
|
+
this.setCloseTimeout();
|
|
1278
|
+
}
|
|
1279
1279
|
|
|
1280
1280
|
if (data !== '') {
|
|
1281
1281
|
// todo: we should only do decodePayload for xhr transports
|
|
@@ -1334,7 +1334,7 @@
|
|
|
1334
1334
|
*/
|
|
1335
1335
|
|
|
1336
1336
|
Transport.prototype.onDisconnect = function () {
|
|
1337
|
-
if (this.close) this.close();
|
|
1337
|
+
if (this.close && this.open) this.close();
|
|
1338
1338
|
this.clearTimeouts();
|
|
1339
1339
|
this.socket.onDisconnect();
|
|
1340
1340
|
return this;
|
|
@@ -1429,8 +1429,8 @@
|
|
|
1429
1429
|
}, this.socket.options['reopen delay']);*/
|
|
1430
1430
|
|
|
1431
1431
|
this.open = false;
|
|
1432
|
-
this.setCloseTimeout();
|
|
1433
1432
|
this.socket.onClose();
|
|
1433
|
+
this.onDisconnect();
|
|
1434
1434
|
};
|
|
1435
1435
|
|
|
1436
1436
|
/**
|
|
@@ -1596,12 +1596,12 @@
|
|
|
1596
1596
|
var url = [
|
|
1597
1597
|
'http' + (options.secure ? 's' : '') + ':/'
|
|
1598
1598
|
, options.host + ':' + options.port
|
|
1599
|
-
,
|
|
1599
|
+
, options.resource
|
|
1600
1600
|
, io.protocol
|
|
1601
1601
|
, io.util.query(this.options.query, 't=' + +new Date)
|
|
1602
1602
|
].join('/');
|
|
1603
1603
|
|
|
1604
|
-
if (this.isXDomain()) {
|
|
1604
|
+
if (this.isXDomain() && !io.util.ua.hasCORS) {
|
|
1605
1605
|
var insertAt = document.getElementsByTagName('script')[0]
|
|
1606
1606
|
, script = document.createElement('script');
|
|
1607
1607
|
|
|
@@ -1806,10 +1806,11 @@
|
|
|
1806
1806
|
|
|
1807
1807
|
Socket.prototype.isXDomain = function () {
|
|
1808
1808
|
|
|
1809
|
-
var port =
|
|
1810
|
-
('https:' ==
|
|
1809
|
+
var port = global.location.port ||
|
|
1810
|
+
('https:' == global.location.protocol ? 443 : 80);
|
|
1811
1811
|
|
|
1812
|
-
return this.options.host !==
|
|
1812
|
+
return this.options.host !== global.location.hostname
|
|
1813
|
+
|| this.options.port != port;
|
|
1813
1814
|
};
|
|
1814
1815
|
|
|
1815
1816
|
/**
|
|
@@ -2235,7 +2236,7 @@
|
|
|
2235
2236
|
* MIT Licensed
|
|
2236
2237
|
*/
|
|
2237
2238
|
|
|
2238
|
-
(function (exports, io) {
|
|
2239
|
+
(function (exports, io, global) {
|
|
2239
2240
|
|
|
2240
2241
|
/**
|
|
2241
2242
|
* Expose constructor.
|
|
@@ -2287,7 +2288,7 @@
|
|
|
2287
2288
|
|
|
2288
2289
|
|
|
2289
2290
|
if (!Socket) {
|
|
2290
|
-
Socket =
|
|
2291
|
+
Socket = global.MozWebSocket || global.WebSocket;
|
|
2291
2292
|
}
|
|
2292
2293
|
|
|
2293
2294
|
this.websocket = new Socket(this.prepareUrl() + query);
|
|
@@ -2378,8 +2379,8 @@
|
|
|
2378
2379
|
*/
|
|
2379
2380
|
|
|
2380
2381
|
WS.check = function () {
|
|
2381
|
-
return ('WebSocket' in
|
|
2382
|
-
|| 'MozWebSocket' in
|
|
2382
|
+
return ('WebSocket' in global && !('__addTask' in WebSocket))
|
|
2383
|
+
|| 'MozWebSocket' in global;
|
|
2383
2384
|
};
|
|
2384
2385
|
|
|
2385
2386
|
/**
|
|
@@ -2404,551 +2405,9 @@
|
|
|
2404
2405
|
})(
|
|
2405
2406
|
'undefined' != typeof io ? io.Transport : module.exports
|
|
2406
2407
|
, 'undefined' != typeof io ? io : module.parent.exports
|
|
2408
|
+
, this
|
|
2407
2409
|
);
|
|
2408
2410
|
|
|
2409
|
-
/**
|
|
2410
|
-
* socket.io
|
|
2411
|
-
* Copyright(c) 2011 LearnBoost <dev@learnboost.com>
|
|
2412
|
-
* MIT Licensed
|
|
2413
|
-
*/
|
|
2414
|
-
|
|
2415
|
-
(function (exports, io) {
|
|
2416
|
-
|
|
2417
|
-
/**
|
|
2418
|
-
* Expose constructor.
|
|
2419
|
-
*/
|
|
2420
|
-
|
|
2421
|
-
exports.flashsocket = Flashsocket;
|
|
2422
|
-
|
|
2423
|
-
/**
|
|
2424
|
-
* The FlashSocket transport. This is a API wrapper for the HTML5 WebSocket
|
|
2425
|
-
* specification. It uses a .swf file to communicate with the server. If you want
|
|
2426
|
-
* to serve the .swf file from a other server than where the Socket.IO script is
|
|
2427
|
-
* coming from you need to use the insecure version of the .swf. More information
|
|
2428
|
-
* about this can be found on the github page.
|
|
2429
|
-
*
|
|
2430
|
-
* @constructor
|
|
2431
|
-
* @extends {io.Transport.websocket}
|
|
2432
|
-
* @api public
|
|
2433
|
-
*/
|
|
2434
|
-
|
|
2435
|
-
function Flashsocket () {
|
|
2436
|
-
io.Transport.websocket.apply(this, arguments);
|
|
2437
|
-
};
|
|
2438
|
-
|
|
2439
|
-
/**
|
|
2440
|
-
* Inherits from Transport.
|
|
2441
|
-
*/
|
|
2442
|
-
|
|
2443
|
-
io.util.inherit(Flashsocket, io.Transport.websocket);
|
|
2444
|
-
|
|
2445
|
-
/**
|
|
2446
|
-
* Transport name
|
|
2447
|
-
*
|
|
2448
|
-
* @api public
|
|
2449
|
-
*/
|
|
2450
|
-
|
|
2451
|
-
Flashsocket.prototype.name = 'flashsocket';
|
|
2452
|
-
|
|
2453
|
-
/**
|
|
2454
|
-
* Disconnect the established `FlashSocket` connection. This is done by adding a
|
|
2455
|
-
* new task to the FlashSocket. The rest will be handled off by the `WebSocket`
|
|
2456
|
-
* transport.
|
|
2457
|
-
*
|
|
2458
|
-
* @returns {Transport}
|
|
2459
|
-
* @api public
|
|
2460
|
-
*/
|
|
2461
|
-
|
|
2462
|
-
Flashsocket.prototype.open = function () {
|
|
2463
|
-
var self = this
|
|
2464
|
-
, args = arguments;
|
|
2465
|
-
|
|
2466
|
-
WebSocket.__addTask(function () {
|
|
2467
|
-
io.Transport.websocket.prototype.open.apply(self, args);
|
|
2468
|
-
});
|
|
2469
|
-
return this;
|
|
2470
|
-
};
|
|
2471
|
-
|
|
2472
|
-
/**
|
|
2473
|
-
* Sends a message to the Socket.IO server. This is done by adding a new
|
|
2474
|
-
* task to the FlashSocket. The rest will be handled off by the `WebSocket`
|
|
2475
|
-
* transport.
|
|
2476
|
-
*
|
|
2477
|
-
* @returns {Transport}
|
|
2478
|
-
* @api public
|
|
2479
|
-
*/
|
|
2480
|
-
|
|
2481
|
-
Flashsocket.prototype.send = function () {
|
|
2482
|
-
var self = this, args = arguments;
|
|
2483
|
-
WebSocket.__addTask(function () {
|
|
2484
|
-
io.Transport.websocket.prototype.send.apply(self, args);
|
|
2485
|
-
});
|
|
2486
|
-
return this;
|
|
2487
|
-
};
|
|
2488
|
-
|
|
2489
|
-
/**
|
|
2490
|
-
* Disconnects the established `FlashSocket` connection.
|
|
2491
|
-
*
|
|
2492
|
-
* @returns {Transport}
|
|
2493
|
-
* @api public
|
|
2494
|
-
*/
|
|
2495
|
-
|
|
2496
|
-
Flashsocket.prototype.close = function () {
|
|
2497
|
-
WebSocket.__tasks.length = 0;
|
|
2498
|
-
io.Transport.websocket.prototype.close.call(this);
|
|
2499
|
-
return this;
|
|
2500
|
-
};
|
|
2501
|
-
|
|
2502
|
-
/**
|
|
2503
|
-
* The WebSocket fall back needs to append the flash container to the body
|
|
2504
|
-
* element, so we need to make sure we have access to it. Or defer the call
|
|
2505
|
-
* until we are sure there is a body element.
|
|
2506
|
-
*
|
|
2507
|
-
* @param {Socket} socket The socket instance that needs a transport
|
|
2508
|
-
* @param {Function} fn The callback
|
|
2509
|
-
* @api private
|
|
2510
|
-
*/
|
|
2511
|
-
|
|
2512
|
-
Flashsocket.prototype.ready = function (socket, fn) {
|
|
2513
|
-
function init () {
|
|
2514
|
-
var options = socket.options
|
|
2515
|
-
, port = options['flash policy port']
|
|
2516
|
-
, path = [
|
|
2517
|
-
'http' + (options.secure ? 's' : '') + ':/'
|
|
2518
|
-
, options.host + ':' + options.port
|
|
2519
|
-
, options.resource
|
|
2520
|
-
, 'static/flashsocket'
|
|
2521
|
-
, 'WebSocketMain' + (socket.isXDomain() ? 'Insecure' : '') + '.swf'
|
|
2522
|
-
];
|
|
2523
|
-
|
|
2524
|
-
// Only start downloading the swf file when the checked that this browser
|
|
2525
|
-
// actually supports it
|
|
2526
|
-
if (!Flashsocket.loaded) {
|
|
2527
|
-
if (typeof WEB_SOCKET_SWF_LOCATION === 'undefined') {
|
|
2528
|
-
// Set the correct file based on the XDomain settings
|
|
2529
|
-
WEB_SOCKET_SWF_LOCATION = path.join('/');
|
|
2530
|
-
}
|
|
2531
|
-
|
|
2532
|
-
if (port !== 843) {
|
|
2533
|
-
WebSocket.loadFlashPolicyFile('xmlsocket://' + options.host + ':' + port);
|
|
2534
|
-
}
|
|
2535
|
-
|
|
2536
|
-
WebSocket.__initialize();
|
|
2537
|
-
Flashsocket.loaded = true;
|
|
2538
|
-
}
|
|
2539
|
-
|
|
2540
|
-
fn.call(self);
|
|
2541
|
-
}
|
|
2542
|
-
|
|
2543
|
-
var self = this;
|
|
2544
|
-
if (document.body) return init();
|
|
2545
|
-
|
|
2546
|
-
io.util.load(init);
|
|
2547
|
-
};
|
|
2548
|
-
|
|
2549
|
-
/**
|
|
2550
|
-
* Check if the FlashSocket transport is supported as it requires that the Adobe
|
|
2551
|
-
* Flash Player plug-in version `10.0.0` or greater is installed. And also check if
|
|
2552
|
-
* the polyfill is correctly loaded.
|
|
2553
|
-
*
|
|
2554
|
-
* @returns {Boolean}
|
|
2555
|
-
* @api public
|
|
2556
|
-
*/
|
|
2557
|
-
|
|
2558
|
-
Flashsocket.check = function () {
|
|
2559
|
-
if (
|
|
2560
|
-
typeof WebSocket == 'undefined'
|
|
2561
|
-
|| !('__initialize' in WebSocket) || !swfobject
|
|
2562
|
-
) return false;
|
|
2563
|
-
|
|
2564
|
-
return swfobject.getFlashPlayerVersion().major >= 10;
|
|
2565
|
-
};
|
|
2566
|
-
|
|
2567
|
-
/**
|
|
2568
|
-
* Check if the FlashSocket transport can be used as cross domain / cross origin
|
|
2569
|
-
* transport. Because we can't see which type (secure or insecure) of .swf is used
|
|
2570
|
-
* we will just return true.
|
|
2571
|
-
*
|
|
2572
|
-
* @returns {Boolean}
|
|
2573
|
-
* @api public
|
|
2574
|
-
*/
|
|
2575
|
-
|
|
2576
|
-
Flashsocket.xdomainCheck = function () {
|
|
2577
|
-
return true;
|
|
2578
|
-
};
|
|
2579
|
-
|
|
2580
|
-
/**
|
|
2581
|
-
* Disable AUTO_INITIALIZATION
|
|
2582
|
-
*/
|
|
2583
|
-
|
|
2584
|
-
if (typeof window != 'undefined') {
|
|
2585
|
-
WEB_SOCKET_DISABLE_AUTO_INITIALIZATION = true;
|
|
2586
|
-
}
|
|
2587
|
-
|
|
2588
|
-
/**
|
|
2589
|
-
* Add the transport to your public io.transports array.
|
|
2590
|
-
*
|
|
2591
|
-
* @api private
|
|
2592
|
-
*/
|
|
2593
|
-
|
|
2594
|
-
io.transports.push('flashsocket');
|
|
2595
|
-
})(
|
|
2596
|
-
'undefined' != typeof io ? io.Transport : module.exports
|
|
2597
|
-
, 'undefined' != typeof io ? io : module.parent.exports
|
|
2598
|
-
);
|
|
2599
|
-
/* SWFObject v2.2 <http://code.google.com/p/swfobject/>
|
|
2600
|
-
is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
|
|
2601
|
-
*/
|
|
2602
|
-
var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O.ActiveXObject!=D){try{var ad=new ActiveXObject(W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y<X;Y++){U[Y]()}}function K(X){if(J){X()}else{U[U.length]=X}}function s(Y){if(typeof O.addEventListener!=D){O.addEventListener("load",Y,false)}else{if(typeof j.addEventListener!=D){j.addEventListener("load",Y,false)}else{if(typeof O.attachEvent!=D){i(O,"onload",Y)}else{if(typeof O.onload=="function"){var X=O.onload;O.onload=function(){X();Y()}}else{O.onload=Y}}}}}function h(){if(T){V()}else{H()}}function V(){var X=j.getElementsByTagName("body")[0];var aa=C(r);aa.setAttribute("type",q);var Z=X.appendChild(aa);if(Z){var Y=0;(function(){if(typeof Z.GetVariable!=D){var ab=Z.GetVariable("$version");if(ab){ab=ab.split(" ")[1].split(",");M.pv=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}else{if(Y<10){Y++;setTimeout(arguments.callee,10);return}}X.removeChild(aa);Z=null;H()})()}else{H()}}function H(){var ag=o.length;if(ag>0){for(var af=0;af<ag;af++){var Y=o[af].id;var ab=o[af].callbackFn;var aa={success:false,id:Y};if(M.pv[0]>0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad<ac;ad++){if(X[ad].getAttribute("name").toLowerCase()!="movie"){ah[X[ad].getAttribute("name")]=X[ad].getAttribute("value")}}P(ai,ah,Y,ab)}else{p(ae);if(ab){ab(aa)}}}}}else{w(Y,true);if(ab){var Z=z(Y);if(Z&&typeof Z.SetVariable!=D){aa.success=true;aa.ref=Z}ab(aa)}}}}}function z(aa){var X=null;var Y=c(aa);if(Y&&Y.nodeName=="OBJECT"){if(typeof Y.SetVariable!=D){X=Y}else{var Z=Y.getElementsByTagName(r)[0];if(Z){X=Z}}}return X}function A(){return !a&&F("6.0.65")&&(M.win||M.mac)&&!(M.wk&&M.wk<312)}function P(aa,ab,X,Z){a=true;E=Z||null;B={success:false,id:X};var ae=c(X);if(ae){if(ae.nodeName=="OBJECT"){l=g(ae);Q=null}else{l=ae;Q=X}aa.id=R;if(typeof aa.width==D||(!/%$/.test(aa.width)&&parseInt(aa.width,10)<310)){aa.width="310"}if(typeof aa.height==D||(!/%$/.test(aa.height)&&parseInt(aa.height,10)<137)){aa.height="137"}j.title=j.title.slice(0,47)+" - Flash Player Installation";var ad=M.ie&&M.win?"ActiveX":"PlugIn",ac="MMredirectURL="+O.location.toString().replace(/&/g,"%26")+"&MMplayerType="+ad+"&MMdoctitle="+j.title;if(typeof ab.flashvars!=D){ab.flashvars+="&"+ac}else{ab.flashvars=ac}if(M.ie&&M.win&&ae.readyState!=4){var Y=C("div");X+="SWFObjectNew";Y.setAttribute("id",X);ae.parentNode.insertBefore(Y,ae);ae.style.display="none";(function(){if(ae.readyState==4){ae.parentNode.removeChild(ae)}else{setTimeout(arguments.callee,10)}})()}u(aa,ab,X)}}function p(Y){if(M.ie&&M.win&&Y.readyState!=4){var X=C("div");Y.parentNode.insertBefore(X,Y);X.parentNode.replaceChild(g(Y),X);Y.style.display="none";(function(){if(Y.readyState==4){Y.parentNode.removeChild(Y)}else{setTimeout(arguments.callee,10)}})()}else{Y.parentNode.replaceChild(g(Y),Y)}}function g(ab){var aa=C("div");if(M.win&&M.ie){aa.innerHTML=ab.innerHTML}else{var Y=ab.getElementsByTagName(r)[0];if(Y){var ad=Y.childNodes;if(ad){var X=ad.length;for(var Z=0;Z<X;Z++){if(!(ad[Z].nodeType==1&&ad[Z].nodeName=="PARAM")&&!(ad[Z].nodeType==8)){aa.appendChild(ad[Z].cloneNode(true))}}}}}return aa}function u(ai,ag,Y){var X,aa=c(Y);if(M.wk&&M.wk<312){return X}if(aa){if(typeof ai.id==D){ai.id=Y}if(M.ie&&M.win){var ah="";for(var ae in ai){if(ai[ae]!=Object.prototype[ae]){if(ae.toLowerCase()=="data"){ag.movie=ai[ae]}else{if(ae.toLowerCase()=="styleclass"){ah+=' class="'+ai[ae]+'"'}else{if(ae.toLowerCase()!="classid"){ah+=" "+ae+'="'+ai[ae]+'"'}}}}}var af="";for(var ad in ag){if(ag[ad]!=Object.prototype[ad]){af+='<param name="'+ad+'" value="'+ag[ad]+'" />'}}aa.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+ah+">"+af+"</object>";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab<ac;ab++){I[ab][0].detachEvent(I[ab][1],I[ab][2])}var Z=N.length;for(var aa=0;aa<Z;aa++){y(N[aa])}for(var Y in M){M[Y]=null}M=null;for(var X in swfobject){swfobject[X]=null}swfobject=null})}}();return{registerObject:function(ab,X,aa,Z){if(M.w3&&ab&&X){var Y={};Y.id=ab;Y.swfVersion=X;Y.expressInstall=aa;Y.callbackFn=Z;o[o.length]=Y;w(ab,false)}else{if(Z){Z({success:false,id:ab})}}},getObjectById:function(X){if(M.w3){return z(X)}},embedSWF:function(ab,ah,ae,ag,Y,aa,Z,ad,af,ac){var X={success:false,id:ah};if(M.w3&&!(M.wk&&M.wk<312)&&ab&&ah&&ae&&ag&&Y){w(ah,false);K(function(){ae+="";ag+="";var aj={};if(af&&typeof af===r){for(var al in af){aj[al]=af[al]}}aj.data=ab;aj.width=ae;aj.height=ag;var am={};if(ad&&typeof ad===r){for(var ak in ad){am[ak]=ad[ak]}}if(Z&&typeof Z===r){for(var ai in Z){if(typeof am.flashvars!=D){am.flashvars+="&"+ai+"="+Z[ai]}else{am.flashvars=ai+"="+Z[ai]}}}if(F(Y)){var an=u(aj,am,ah);if(aj.id==ah){w(ah,true)}X.success=true;X.ref=an}else{if(aa&&A()){aj.data=aa;P(aj,am,ah,ac);return}else{w(ah,true)}}if(ac){ac(X)}})}else{if(ac){ac(X)}}},switchOffAutoHideShow:function(){m=false},ua:M,getFlashPlayerVersion:function(){return{major:M.pv[0],minor:M.pv[1],release:M.pv[2]}},hasFlashPlayerVersion:F,createSWF:function(Z,Y,X){if(M.w3){return u(Z,Y,X)}else{return undefined}},showExpressInstall:function(Z,aa,X,Y){if(M.w3&&A()){P(Z,aa,X,Y)}},removeSWF:function(X){if(M.w3){y(X)}},createCSS:function(aa,Z,Y,X){if(M.w3){v(aa,Z,Y,X)}},addDomLoadEvent:K,addLoadEvent:s,getQueryParamValue:function(aa){var Z=j.location.search||j.location.hash;if(Z){if(/\?/.test(Z)){Z=Z.split("?")[1]}if(aa==null){return L(Z)}var Y=Z.split("&");for(var X=0;X<Y.length;X++){if(Y[X].substring(0,Y[X].indexOf("="))==aa){return L(Y[X].substring((Y[X].indexOf("=")+1)))}}}return""},expressInstallCallback:function(){if(a){var X=c(R);if(X&&l){X.parentNode.replaceChild(l,X);if(Q){w(Q,true);if(M.ie&&M.win){l.style.display="block"}}if(E){E(B)}}a=false}}}}();// Copyright: Hiroshi Ichikawa <http://gimite.net/en/>
|
|
2603
|
-
// License: New BSD License
|
|
2604
|
-
// Reference: http://dev.w3.org/html5/websockets/
|
|
2605
|
-
// Reference: http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol
|
|
2606
|
-
|
|
2607
|
-
(function() {
|
|
2608
|
-
|
|
2609
|
-
if (window.WebSocket) return;
|
|
2610
|
-
|
|
2611
|
-
var console = window.console;
|
|
2612
|
-
if (!console || !console.log || !console.error) {
|
|
2613
|
-
console = {log: function(){ }, error: function(){ }};
|
|
2614
|
-
}
|
|
2615
|
-
|
|
2616
|
-
if (!swfobject.hasFlashPlayerVersion("10.0.0")) {
|
|
2617
|
-
console.error("Flash Player >= 10.0.0 is required.");
|
|
2618
|
-
return;
|
|
2619
|
-
}
|
|
2620
|
-
if (location.protocol == "file:") {
|
|
2621
|
-
console.error(
|
|
2622
|
-
"WARNING: web-socket-js doesn't work in file:///... URL " +
|
|
2623
|
-
"unless you set Flash Security Settings properly. " +
|
|
2624
|
-
"Open the page via Web server i.e. http://...");
|
|
2625
|
-
}
|
|
2626
|
-
|
|
2627
|
-
/**
|
|
2628
|
-
* This class represents a faux web socket.
|
|
2629
|
-
* @param {string} url
|
|
2630
|
-
* @param {array or string} protocols
|
|
2631
|
-
* @param {string} proxyHost
|
|
2632
|
-
* @param {int} proxyPort
|
|
2633
|
-
* @param {string} headers
|
|
2634
|
-
*/
|
|
2635
|
-
WebSocket = function(url, protocols, proxyHost, proxyPort, headers) {
|
|
2636
|
-
var self = this;
|
|
2637
|
-
self.__id = WebSocket.__nextId++;
|
|
2638
|
-
WebSocket.__instances[self.__id] = self;
|
|
2639
|
-
self.readyState = WebSocket.CONNECTING;
|
|
2640
|
-
self.bufferedAmount = 0;
|
|
2641
|
-
self.__events = {};
|
|
2642
|
-
if (!protocols) {
|
|
2643
|
-
protocols = [];
|
|
2644
|
-
} else if (typeof protocols == "string") {
|
|
2645
|
-
protocols = [protocols];
|
|
2646
|
-
}
|
|
2647
|
-
// Uses setTimeout() to make sure __createFlash() runs after the caller sets ws.onopen etc.
|
|
2648
|
-
// Otherwise, when onopen fires immediately, onopen is called before it is set.
|
|
2649
|
-
setTimeout(function() {
|
|
2650
|
-
WebSocket.__addTask(function() {
|
|
2651
|
-
WebSocket.__flash.create(
|
|
2652
|
-
self.__id, url, protocols, proxyHost || null, proxyPort || 0, headers || null);
|
|
2653
|
-
});
|
|
2654
|
-
}, 0);
|
|
2655
|
-
};
|
|
2656
|
-
|
|
2657
|
-
/**
|
|
2658
|
-
* Send data to the web socket.
|
|
2659
|
-
* @param {string} data The data to send to the socket.
|
|
2660
|
-
* @return {boolean} True for success, false for failure.
|
|
2661
|
-
*/
|
|
2662
|
-
WebSocket.prototype.send = function(data) {
|
|
2663
|
-
if (this.readyState == WebSocket.CONNECTING) {
|
|
2664
|
-
throw "INVALID_STATE_ERR: Web Socket connection has not been established";
|
|
2665
|
-
}
|
|
2666
|
-
// We use encodeURIComponent() here, because FABridge doesn't work if
|
|
2667
|
-
// the argument includes some characters. We don't use escape() here
|
|
2668
|
-
// because of this:
|
|
2669
|
-
// https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Functions#escape_and_unescape_Functions
|
|
2670
|
-
// But it looks decodeURIComponent(encodeURIComponent(s)) doesn't
|
|
2671
|
-
// preserve all Unicode characters either e.g. "\uffff" in Firefox.
|
|
2672
|
-
// Note by wtritch: Hopefully this will not be necessary using ExternalInterface. Will require
|
|
2673
|
-
// additional testing.
|
|
2674
|
-
var result = WebSocket.__flash.send(this.__id, encodeURIComponent(data));
|
|
2675
|
-
if (result < 0) { // success
|
|
2676
|
-
return true;
|
|
2677
|
-
} else {
|
|
2678
|
-
this.bufferedAmount += result;
|
|
2679
|
-
return false;
|
|
2680
|
-
}
|
|
2681
|
-
};
|
|
2682
|
-
|
|
2683
|
-
/**
|
|
2684
|
-
* Close this web socket gracefully.
|
|
2685
|
-
*/
|
|
2686
|
-
WebSocket.prototype.close = function() {
|
|
2687
|
-
if (this.readyState == WebSocket.CLOSED || this.readyState == WebSocket.CLOSING) {
|
|
2688
|
-
return;
|
|
2689
|
-
}
|
|
2690
|
-
this.readyState = WebSocket.CLOSING;
|
|
2691
|
-
WebSocket.__flash.close(this.__id);
|
|
2692
|
-
};
|
|
2693
|
-
|
|
2694
|
-
/**
|
|
2695
|
-
* Implementation of {@link <a href="http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-registration">DOM 2 EventTarget Interface</a>}
|
|
2696
|
-
*
|
|
2697
|
-
* @param {string} type
|
|
2698
|
-
* @param {function} listener
|
|
2699
|
-
* @param {boolean} useCapture
|
|
2700
|
-
* @return void
|
|
2701
|
-
*/
|
|
2702
|
-
WebSocket.prototype.addEventListener = function(type, listener, useCapture) {
|
|
2703
|
-
if (!(type in this.__events)) {
|
|
2704
|
-
this.__events[type] = [];
|
|
2705
|
-
}
|
|
2706
|
-
this.__events[type].push(listener);
|
|
2707
|
-
};
|
|
2708
|
-
|
|
2709
|
-
/**
|
|
2710
|
-
* Implementation of {@link <a href="http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-registration">DOM 2 EventTarget Interface</a>}
|
|
2711
|
-
*
|
|
2712
|
-
* @param {string} type
|
|
2713
|
-
* @param {function} listener
|
|
2714
|
-
* @param {boolean} useCapture
|
|
2715
|
-
* @return void
|
|
2716
|
-
*/
|
|
2717
|
-
WebSocket.prototype.removeEventListener = function(type, listener, useCapture) {
|
|
2718
|
-
if (!(type in this.__events)) return;
|
|
2719
|
-
var events = this.__events[type];
|
|
2720
|
-
for (var i = events.length - 1; i >= 0; --i) {
|
|
2721
|
-
if (events[i] === listener) {
|
|
2722
|
-
events.splice(i, 1);
|
|
2723
|
-
break;
|
|
2724
|
-
}
|
|
2725
|
-
}
|
|
2726
|
-
};
|
|
2727
|
-
|
|
2728
|
-
/**
|
|
2729
|
-
* Implementation of {@link <a href="http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-registration">DOM 2 EventTarget Interface</a>}
|
|
2730
|
-
*
|
|
2731
|
-
* @param {Event} event
|
|
2732
|
-
* @return void
|
|
2733
|
-
*/
|
|
2734
|
-
WebSocket.prototype.dispatchEvent = function(event) {
|
|
2735
|
-
var events = this.__events[event.type] || [];
|
|
2736
|
-
for (var i = 0; i < events.length; ++i) {
|
|
2737
|
-
events[i](event);
|
|
2738
|
-
}
|
|
2739
|
-
var handler = this["on" + event.type];
|
|
2740
|
-
if (handler) handler(event);
|
|
2741
|
-
};
|
|
2742
|
-
|
|
2743
|
-
/**
|
|
2744
|
-
* Handles an event from Flash.
|
|
2745
|
-
* @param {Object} flashEvent
|
|
2746
|
-
*/
|
|
2747
|
-
WebSocket.prototype.__handleEvent = function(flashEvent) {
|
|
2748
|
-
if ("readyState" in flashEvent) {
|
|
2749
|
-
this.readyState = flashEvent.readyState;
|
|
2750
|
-
}
|
|
2751
|
-
if ("protocol" in flashEvent) {
|
|
2752
|
-
this.protocol = flashEvent.protocol;
|
|
2753
|
-
}
|
|
2754
|
-
|
|
2755
|
-
var jsEvent;
|
|
2756
|
-
if (flashEvent.type == "open" || flashEvent.type == "error") {
|
|
2757
|
-
jsEvent = this.__createSimpleEvent(flashEvent.type);
|
|
2758
|
-
} else if (flashEvent.type == "close") {
|
|
2759
|
-
// TODO implement jsEvent.wasClean
|
|
2760
|
-
jsEvent = this.__createSimpleEvent("close");
|
|
2761
|
-
} else if (flashEvent.type == "message") {
|
|
2762
|
-
var data = decodeURIComponent(flashEvent.message);
|
|
2763
|
-
jsEvent = this.__createMessageEvent("message", data);
|
|
2764
|
-
} else {
|
|
2765
|
-
throw "unknown event type: " + flashEvent.type;
|
|
2766
|
-
}
|
|
2767
|
-
|
|
2768
|
-
this.dispatchEvent(jsEvent);
|
|
2769
|
-
};
|
|
2770
|
-
|
|
2771
|
-
WebSocket.prototype.__createSimpleEvent = function(type) {
|
|
2772
|
-
if (document.createEvent && window.Event) {
|
|
2773
|
-
var event = document.createEvent("Event");
|
|
2774
|
-
event.initEvent(type, false, false);
|
|
2775
|
-
return event;
|
|
2776
|
-
} else {
|
|
2777
|
-
return {type: type, bubbles: false, cancelable: false};
|
|
2778
|
-
}
|
|
2779
|
-
};
|
|
2780
|
-
|
|
2781
|
-
WebSocket.prototype.__createMessageEvent = function(type, data) {
|
|
2782
|
-
if (document.createEvent && window.MessageEvent && !window.opera) {
|
|
2783
|
-
var event = document.createEvent("MessageEvent");
|
|
2784
|
-
event.initMessageEvent("message", false, false, data, null, null, window, null);
|
|
2785
|
-
return event;
|
|
2786
|
-
} else {
|
|
2787
|
-
// IE and Opera, the latter one truncates the data parameter after any 0x00 bytes.
|
|
2788
|
-
return {type: type, data: data, bubbles: false, cancelable: false};
|
|
2789
|
-
}
|
|
2790
|
-
};
|
|
2791
|
-
|
|
2792
|
-
/**
|
|
2793
|
-
* Define the WebSocket readyState enumeration.
|
|
2794
|
-
*/
|
|
2795
|
-
WebSocket.CONNECTING = 0;
|
|
2796
|
-
WebSocket.OPEN = 1;
|
|
2797
|
-
WebSocket.CLOSING = 2;
|
|
2798
|
-
WebSocket.CLOSED = 3;
|
|
2799
|
-
|
|
2800
|
-
WebSocket.__flash = null;
|
|
2801
|
-
WebSocket.__instances = {};
|
|
2802
|
-
WebSocket.__tasks = [];
|
|
2803
|
-
WebSocket.__nextId = 0;
|
|
2804
|
-
|
|
2805
|
-
/**
|
|
2806
|
-
* Load a new flash security policy file.
|
|
2807
|
-
* @param {string} url
|
|
2808
|
-
*/
|
|
2809
|
-
WebSocket.loadFlashPolicyFile = function(url){
|
|
2810
|
-
WebSocket.__addTask(function() {
|
|
2811
|
-
WebSocket.__flash.loadManualPolicyFile(url);
|
|
2812
|
-
});
|
|
2813
|
-
};
|
|
2814
|
-
|
|
2815
|
-
/**
|
|
2816
|
-
* Loads WebSocketMain.swf and creates WebSocketMain object in Flash.
|
|
2817
|
-
*/
|
|
2818
|
-
WebSocket.__initialize = function() {
|
|
2819
|
-
if (WebSocket.__flash) return;
|
|
2820
|
-
|
|
2821
|
-
if (WebSocket.__swfLocation) {
|
|
2822
|
-
// For backword compatibility.
|
|
2823
|
-
window.WEB_SOCKET_SWF_LOCATION = WebSocket.__swfLocation;
|
|
2824
|
-
}
|
|
2825
|
-
if (!window.WEB_SOCKET_SWF_LOCATION) {
|
|
2826
|
-
console.error("[WebSocket] set WEB_SOCKET_SWF_LOCATION to location of WebSocketMain.swf");
|
|
2827
|
-
return;
|
|
2828
|
-
}
|
|
2829
|
-
var container = document.createElement("div");
|
|
2830
|
-
container.id = "webSocketContainer";
|
|
2831
|
-
// Hides Flash box. We cannot use display: none or visibility: hidden because it prevents
|
|
2832
|
-
// Flash from loading at least in IE. So we move it out of the screen at (-100, -100).
|
|
2833
|
-
// But this even doesn't work with Flash Lite (e.g. in Droid Incredible). So with Flash
|
|
2834
|
-
// Lite, we put it at (0, 0). This shows 1x1 box visible at left-top corner but this is
|
|
2835
|
-
// the best we can do as far as we know now.
|
|
2836
|
-
container.style.position = "absolute";
|
|
2837
|
-
if (WebSocket.__isFlashLite()) {
|
|
2838
|
-
container.style.left = "0px";
|
|
2839
|
-
container.style.top = "0px";
|
|
2840
|
-
} else {
|
|
2841
|
-
container.style.left = "-100px";
|
|
2842
|
-
container.style.top = "-100px";
|
|
2843
|
-
}
|
|
2844
|
-
var holder = document.createElement("div");
|
|
2845
|
-
holder.id = "webSocketFlash";
|
|
2846
|
-
container.appendChild(holder);
|
|
2847
|
-
document.body.appendChild(container);
|
|
2848
|
-
// See this article for hasPriority:
|
|
2849
|
-
// http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c36cfb8137124318eebc6-7ffd.html
|
|
2850
|
-
swfobject.embedSWF(
|
|
2851
|
-
WEB_SOCKET_SWF_LOCATION,
|
|
2852
|
-
"webSocketFlash",
|
|
2853
|
-
"1" /* width */,
|
|
2854
|
-
"1" /* height */,
|
|
2855
|
-
"10.0.0" /* SWF version */,
|
|
2856
|
-
null,
|
|
2857
|
-
null,
|
|
2858
|
-
{hasPriority: true, swliveconnect : true, allowScriptAccess: "always"},
|
|
2859
|
-
null,
|
|
2860
|
-
function(e) {
|
|
2861
|
-
if (!e.success) {
|
|
2862
|
-
console.error("[WebSocket] swfobject.embedSWF failed");
|
|
2863
|
-
}
|
|
2864
|
-
});
|
|
2865
|
-
};
|
|
2866
|
-
|
|
2867
|
-
/**
|
|
2868
|
-
* Called by Flash to notify JS that it's fully loaded and ready
|
|
2869
|
-
* for communication.
|
|
2870
|
-
*/
|
|
2871
|
-
WebSocket.__onFlashInitialized = function() {
|
|
2872
|
-
// We need to set a timeout here to avoid round-trip calls
|
|
2873
|
-
// to flash during the initialization process.
|
|
2874
|
-
setTimeout(function() {
|
|
2875
|
-
WebSocket.__flash = document.getElementById("webSocketFlash");
|
|
2876
|
-
WebSocket.__flash.setCallerUrl(location.href);
|
|
2877
|
-
WebSocket.__flash.setDebug(!!window.WEB_SOCKET_DEBUG);
|
|
2878
|
-
for (var i = 0; i < WebSocket.__tasks.length; ++i) {
|
|
2879
|
-
WebSocket.__tasks[i]();
|
|
2880
|
-
}
|
|
2881
|
-
WebSocket.__tasks = [];
|
|
2882
|
-
}, 0);
|
|
2883
|
-
};
|
|
2884
|
-
|
|
2885
|
-
/**
|
|
2886
|
-
* Called by Flash to notify WebSockets events are fired.
|
|
2887
|
-
*/
|
|
2888
|
-
WebSocket.__onFlashEvent = function() {
|
|
2889
|
-
setTimeout(function() {
|
|
2890
|
-
try {
|
|
2891
|
-
// Gets events using receiveEvents() instead of getting it from event object
|
|
2892
|
-
// of Flash event. This is to make sure to keep message order.
|
|
2893
|
-
// It seems sometimes Flash events don't arrive in the same order as they are sent.
|
|
2894
|
-
var events = WebSocket.__flash.receiveEvents();
|
|
2895
|
-
for (var i = 0; i < events.length; ++i) {
|
|
2896
|
-
WebSocket.__instances[events[i].webSocketId].__handleEvent(events[i]);
|
|
2897
|
-
}
|
|
2898
|
-
} catch (e) {
|
|
2899
|
-
console.error(e);
|
|
2900
|
-
}
|
|
2901
|
-
}, 0);
|
|
2902
|
-
return true;
|
|
2903
|
-
};
|
|
2904
|
-
|
|
2905
|
-
// Called by Flash.
|
|
2906
|
-
WebSocket.__log = function(message) {
|
|
2907
|
-
console.log(decodeURIComponent(message));
|
|
2908
|
-
};
|
|
2909
|
-
|
|
2910
|
-
// Called by Flash.
|
|
2911
|
-
WebSocket.__error = function(message) {
|
|
2912
|
-
console.error(decodeURIComponent(message));
|
|
2913
|
-
};
|
|
2914
|
-
|
|
2915
|
-
WebSocket.__addTask = function(task) {
|
|
2916
|
-
if (WebSocket.__flash) {
|
|
2917
|
-
task();
|
|
2918
|
-
} else {
|
|
2919
|
-
WebSocket.__tasks.push(task);
|
|
2920
|
-
}
|
|
2921
|
-
};
|
|
2922
|
-
|
|
2923
|
-
/**
|
|
2924
|
-
* Test if the browser is running flash lite.
|
|
2925
|
-
* @return {boolean} True if flash lite is running, false otherwise.
|
|
2926
|
-
*/
|
|
2927
|
-
WebSocket.__isFlashLite = function() {
|
|
2928
|
-
if (!window.navigator || !window.navigator.mimeTypes) {
|
|
2929
|
-
return false;
|
|
2930
|
-
}
|
|
2931
|
-
var mimeType = window.navigator.mimeTypes["application/x-shockwave-flash"];
|
|
2932
|
-
if (!mimeType || !mimeType.enabledPlugin || !mimeType.enabledPlugin.filename) {
|
|
2933
|
-
return false;
|
|
2934
|
-
}
|
|
2935
|
-
return mimeType.enabledPlugin.filename.match(/flashlite/i) ? true : false;
|
|
2936
|
-
};
|
|
2937
|
-
|
|
2938
|
-
if (!window.WEB_SOCKET_DISABLE_AUTO_INITIALIZATION) {
|
|
2939
|
-
if (window.addEventListener) {
|
|
2940
|
-
window.addEventListener("load", function(){
|
|
2941
|
-
WebSocket.__initialize();
|
|
2942
|
-
}, false);
|
|
2943
|
-
} else {
|
|
2944
|
-
window.attachEvent("onload", function(){
|
|
2945
|
-
WebSocket.__initialize();
|
|
2946
|
-
});
|
|
2947
|
-
}
|
|
2948
|
-
}
|
|
2949
|
-
|
|
2950
|
-
})();
|
|
2951
|
-
|
|
2952
2411
|
/**
|
|
2953
2412
|
* socket.io
|
|
2954
2413
|
* Copyright(c) 2011 LearnBoost <dev@learnboost.com>
|
|
@@ -3495,7 +2954,17 @@ var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="Sho
|
|
|
3495
2954
|
* MIT Licensed
|
|
3496
2955
|
*/
|
|
3497
2956
|
|
|
3498
|
-
(function (exports, io) {
|
|
2957
|
+
(function (exports, io, global) {
|
|
2958
|
+
/**
|
|
2959
|
+
* There is a way to hide the loading indicator in Firefox. If you create and
|
|
2960
|
+
* remove a iframe it will stop showing the current loading indicator.
|
|
2961
|
+
* Unfortunately we can't feature detect that and UA sniffing is evil.
|
|
2962
|
+
*
|
|
2963
|
+
* @api private
|
|
2964
|
+
*/
|
|
2965
|
+
|
|
2966
|
+
var indicator = global.document && "MozAppearance" in
|
|
2967
|
+
global.document.documentElement.style;
|
|
3499
2968
|
|
|
3500
2969
|
/**
|
|
3501
2970
|
* Expose constructor.
|
|
@@ -3606,7 +3075,9 @@ var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="Sho
|
|
|
3606
3075
|
|
|
3607
3076
|
initIframe();
|
|
3608
3077
|
|
|
3609
|
-
|
|
3078
|
+
// we temporarily stringify until we figure out how to prevent
|
|
3079
|
+
// browsers from turning `\n` into `\r\n` in form inputs
|
|
3080
|
+
this.area.value = io.JSON.stringify(data);
|
|
3610
3081
|
|
|
3611
3082
|
try {
|
|
3612
3083
|
this.form.submit();
|
|
@@ -3654,6 +3125,14 @@ var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="Sho
|
|
|
3654
3125
|
var insertAt = document.getElementsByTagName('script')[0]
|
|
3655
3126
|
insertAt.parentNode.insertBefore(script, insertAt);
|
|
3656
3127
|
this.script = script;
|
|
3128
|
+
|
|
3129
|
+
if (indicator) {
|
|
3130
|
+
setTimeout(function () {
|
|
3131
|
+
var iframe = document.createElement('iframe');
|
|
3132
|
+
document.body.appendChild(iframe);
|
|
3133
|
+
document.body.removeChild(iframe);
|
|
3134
|
+
}, 100);
|
|
3135
|
+
}
|
|
3657
3136
|
};
|
|
3658
3137
|
|
|
3659
3138
|
/**
|
|
@@ -3671,6 +3150,23 @@ var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="Sho
|
|
|
3671
3150
|
return this;
|
|
3672
3151
|
};
|
|
3673
3152
|
|
|
3153
|
+
/**
|
|
3154
|
+
* The indicator hack only works after onload
|
|
3155
|
+
*
|
|
3156
|
+
* @param {Socket} socket The socket instance that needs a transport
|
|
3157
|
+
* @param {Function} fn The callback
|
|
3158
|
+
* @api private
|
|
3159
|
+
*/
|
|
3160
|
+
|
|
3161
|
+
JSONPPolling.prototype.ready = function (socket, fn) {
|
|
3162
|
+
var self = this;
|
|
3163
|
+
if (!indicator) return fn.call(this);
|
|
3164
|
+
|
|
3165
|
+
io.util.load(function () {
|
|
3166
|
+
fn.call(self);
|
|
3167
|
+
});
|
|
3168
|
+
};
|
|
3169
|
+
|
|
3674
3170
|
/**
|
|
3675
3171
|
* Checks if browser supports this transport.
|
|
3676
3172
|
*
|
|
@@ -3679,7 +3175,7 @@ var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="Sho
|
|
|
3679
3175
|
*/
|
|
3680
3176
|
|
|
3681
3177
|
JSONPPolling.check = function () {
|
|
3682
|
-
return
|
|
3178
|
+
return 'document' in global;
|
|
3683
3179
|
};
|
|
3684
3180
|
|
|
3685
3181
|
/**
|
|
@@ -3704,4 +3200,5 @@ var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="Sho
|
|
|
3704
3200
|
})(
|
|
3705
3201
|
'undefined' != typeof io ? io.Transport : module.exports
|
|
3706
3202
|
, 'undefined' != typeof io ? io : module.parent.exports
|
|
3203
|
+
, this
|
|
3707
3204
|
);
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: juggernaut
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.0
|
|
4
|
+
version: 2.1.0
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -9,11 +9,11 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2011-
|
|
12
|
+
date: 2011-10-31 00:00:00.000000000Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: redis
|
|
16
|
-
requirement: &
|
|
16
|
+
requirement: &70257045823580 !ruby/object:Gem::Requirement
|
|
17
17
|
none: false
|
|
18
18
|
requirements:
|
|
19
19
|
- - ! '>='
|
|
@@ -21,7 +21,7 @@ dependencies:
|
|
|
21
21
|
version: '0'
|
|
22
22
|
type: :runtime
|
|
23
23
|
prerelease: false
|
|
24
|
-
version_requirements: *
|
|
24
|
+
version_requirements: *70257045823580
|
|
25
25
|
description: Use Juggernaut to easily implement realtime chat, collaboration, gaming
|
|
26
26
|
and much more!
|
|
27
27
|
email: info@eribium.org
|