1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
define.class('$system/base/compositionclient', function(require, baseclass){
var Device = require('$system/platform/$platform/device$platform')
var WebRTC = require('$system/rpc/webrtc')
var BusClient = require('$system/rpc/busclient')
this.atConstructor = function(previous, parent, precached, canvas){
window.composition = this
if(previous){
this.reload = (previous.reload || 0) + 1
this.device = previous.device
this.device.reload = this.reload
console.log("Reload " + this.reload)
}
else{
this.device = new Device(undefined, canvas)
}
baseclass.atConstructor.call(this, previous, parent, precached)
this.screen._size = this.device.size
}
this.createBus = function(){
this.bus = new BusClient((location.href.indexOf('https') === 0?'wss://':'ws://')+location.host+location.pathname)
}
this.doRender = function(previous, parent){
baseclass.doRender.call(this, previous, parent)
this.screen.addListener('locationhash', function(event){
var obj = event.value
var str = ''
for(var key in obj){
var value = obj[key]
if(str.length) str += '&'
if(value === true) str += key
else str += key + '=' + value
}
location.hash = '#' + str
})
this.decodeLocationHash = function(){
var obj = {}
var parts = location.hash.slice(1).split(/\&/)
for(var i = 0; i < parts.length; i++){
var part = parts[i]
var kv = part.split(/=/)
if(kv.length === 1) obj[kv[0]] = true
else{
obj[kv[0]] = kv[1]
}
}
this.screen.locationhash = obj
}
window.onhashchange = function(){
this.decodeLocationHash()
}.bind(this)
this.decodeLocationHash()
}
})
|