diff options
Diffstat (limited to 'res')
| -rw-r--r-- | res/client.js | 1677 | ||||
| -rw-r--r-- | res/css/custom.css | 4 |
2 files changed, 1681 insertions, 0 deletions
diff --git a/res/client.js b/res/client.js new file mode 100644 index 0000000..d9cc67b --- /dev/null +++ b/res/client.js @@ -0,0 +1,1677 @@ +// Generated by Haxe 4.0.5 +(function ($global) { "use strict"; +var $estr = function() { return js_Boot.__string_rec(this,''); },$hxEnums = $hxEnums || {},$_; +function $extend(from, fields) { + var proto = Object.create(from); + for (var name in fields) proto[name] = fields[name]; + if( fields.toString !== Object.prototype.toString ) proto.toString = fields.toString; + return proto; +} +var ClientGroup = $hxEnums["ClientGroup"] = { __ename__ : true, __constructs__ : ["User","Leader","Admin"] + ,User: {_hx_index:0,__enum__:"ClientGroup",toString:$estr} + ,Leader: {_hx_index:1,__enum__:"ClientGroup",toString:$estr} + ,Admin: {_hx_index:2,__enum__:"ClientGroup",toString:$estr} +}; +var Client = function(name,group) { + this.name = name; + var i = group; + if(group == null) { + i = 0; + } + this.group = i; +}; +Client.__name__ = true; +Client.fromData = function(data) { + return new Client(data.name,data.group); +}; +Client.prototype = { + setGroupFlag: function(type,flag) { + if(flag) { + this.group |= 1 << type._hx_index; + } else { + this.group &= -1 - (1 << type._hx_index); + } + return flag; + } +}; +var ClientTools = function() { }; +ClientTools.__name__ = true; +ClientTools.setLeader = function(clients,name) { + var _g = 0; + while(_g < clients.length) { + var client = clients[_g]; + ++_g; + if(client.name == name) { + client.setGroupFlag(ClientGroup.Leader,true); + } else if((client.group & 2) != 0) { + client.setGroupFlag(ClientGroup.Leader,false); + } + } +}; +ClientTools.getByName = function(clients,name,def) { + var _g = 0; + while(_g < clients.length) { + var client = clients[_g]; + ++_g; + if(client.name == name) { + return client; + } + } + return def; +}; +var EReg = function(r,opt) { + this.r = new RegExp(r,opt.split("u").join("")); +}; +EReg.__name__ = true; +EReg.prototype = { + match: function(s) { + if(this.r.global) { + this.r.lastIndex = 0; + } + this.r.m = this.r.exec(s); + this.r.s = s; + return this.r.m != null; + } + ,matched: function(n) { + if(this.r.m != null && n >= 0 && n < this.r.m.length) { + return this.r.m[n]; + } else { + throw new js__$Boot_HaxeError("EReg::matched"); + } + } +}; +var HxOverrides = function() { }; +HxOverrides.__name__ = true; +HxOverrides.substr = function(s,pos,len) { + if(len == null) { + len = s.length; + } else if(len < 0) { + if(pos == 0) { + len = s.length + len; + } else { + return ""; + } + } + return s.substr(pos,len); +}; +HxOverrides.remove = function(a,obj) { + var i = a.indexOf(obj); + if(i == -1) { + return false; + } + a.splice(i,1); + return true; +}; +HxOverrides.iter = function(a) { + return { cur : 0, arr : a, hasNext : function() { + return this.cur < this.arr.length; + }, next : function() { + return this.arr[this.cur++]; + }}; +}; +var Lambda = function() { }; +Lambda.__name__ = true; +Lambda.exists = function(it,f) { + var x = $getIterator(it); + while(x.hasNext()) if(f(x.next())) { + return true; + } + return false; +}; +Lambda.find = function(it,f) { + var v = $getIterator(it); + while(v.hasNext()) { + var v1 = v.next(); + if(f(v1)) { + return v1; + } + } + return null; +}; +var haxe_ds_StringMap = function() { + this.h = { }; +}; +haxe_ds_StringMap.__name__ = true; +haxe_ds_StringMap.prototype = { + setReserved: function(key,value) { + if(this.rh == null) { + this.rh = { }; + } + this.rh["$" + key] = value; + } + ,getReserved: function(key) { + if(this.rh == null) { + return null; + } else { + return this.rh["$" + key]; + } + } +}; +var Lang = function() { }; +Lang.__name__ = true; +Lang.request = function(path,callback) { + var http = new haxe_http_HttpJs(path); + http.onData = callback; + http.request(); +}; +Lang.init = function(folderPath,callback) { + var _this = Lang.langs; + _this.h = { }; + _this.rh = null; + var count = 0; + var _g = 0; + var _g1 = Lang.ids; + while(_g < _g1.length) { + var name = [_g1[_g]]; + ++_g; + Lang.request("" + folderPath + "/" + name[0] + ".json",(function(name1) { + return function(data) { + var data1 = JSON.parse(data); + var lang = new haxe_ds_StringMap(); + var _g2 = 0; + var _g11 = Reflect.fields(data1); + while(_g2 < _g11.length) { + var key = _g11[_g2]; + ++_g2; + var v = Reflect.field(data1,key); + if(__map_reserved[key] != null) { + lang.setReserved(key,v); + } else { + lang.h[key] = v; + } + } + var id = haxe_io_Path.withoutExtension(name1[0]); + var _this1 = Lang.langs; + if(__map_reserved[id] != null) { + _this1.setReserved(id,lang); + } else { + _this1.h[id] = lang; + } + count += 1; + if(count == Lang.ids.length && callback != null) { + callback(); + } + return; + }; + })(name)); + } +}; +Lang.get = function(key) { + var key1 = Lang.lang; + var _this = Lang.langs; + if((__map_reserved[key1] != null ? _this.getReserved(key1) : _this.h[key1]) == null) { + Lang.lang = "en"; + } + var key2 = Lang.lang; + var _this1 = Lang.langs; + var _this2 = __map_reserved[key2] != null ? _this1.getReserved(key2) : _this1.h[key2]; + var text = __map_reserved[key] != null ? _this2.getReserved(key) : _this2.h[key]; + if(text == null) { + return key; + } else { + return text; + } +}; +Math.__name__ = true; +var Reflect = function() { }; +Reflect.__name__ = true; +Reflect.field = function(o,field) { + try { + return o[field]; + } catch( e ) { + return null; + } +}; +Reflect.fields = function(o) { + var a = []; + if(o != null) { + var hasOwnProperty = Object.prototype.hasOwnProperty; + for( var f in o ) { + if(f != "__id__" && f != "hx__closures__" && hasOwnProperty.call(o,f)) { + a.push(f); + } + } + } + return a; +}; +Reflect.isFunction = function(f) { + if(typeof(f) == "function") { + return !(f.__name__ || f.__ename__); + } else { + return false; + } +}; +Reflect.compareMethods = function(f1,f2) { + if(f1 == f2) { + return true; + } + if(!Reflect.isFunction(f1) || !Reflect.isFunction(f2)) { + return false; + } + if(f1.scope == f2.scope && f1.method == f2.method) { + return f1.method != null; + } else { + return false; + } +}; +var Std = function() { }; +Std.__name__ = true; +Std.string = function(s) { + return js_Boot.__string_rec(s,""); +}; +Std.parseInt = function(x) { + if(x != null) { + var _g = 0; + var _g1 = x.length; + while(_g < _g1) { + var i = _g++; + var c = x.charCodeAt(i); + if(c <= 8 || c >= 14 && c != 32 && c != 45) { + var v = parseInt(x, (x[(i + 1)]=="x" || x[(i + 1)]=="X") ? 16 : 10); + if(isNaN(v)) { + return null; + } else { + return v; + } + } + } + } + return null; +}; +var StringTools = function() { }; +StringTools.__name__ = true; +StringTools.startsWith = function(s,start) { + if(s.length >= start.length) { + return s.lastIndexOf(start,0) == 0; + } else { + return false; + } +}; +StringTools.replace = function(s,sub,by) { + return s.split(sub).join(by); +}; +var client_Buttons = function() { }; +client_Buttons.__name__ = true; +client_Buttons.init = function(main) { + client_Buttons.initChatInput(main); + var smilesBtn = window.document.querySelector("#smilesbtn"); + smilesBtn.onclick = function(e) { + smilesBtn.classList.toggle("active"); + var smilesWrap = window.document.querySelector("#smileswrap"); + if(smilesBtn.classList.contains("active")) { + return smilesWrap.style.display = "block"; + } else { + return smilesWrap.style.display = "none"; + } + }; + window.document.querySelector("#clearchatbtn").style.display = "inline-block"; + window.document.querySelector("#clearchatbtn").onclick = function(e1) { + if((main.personal.group & 4) != 0) { + main.send({ type : "ClearChat"}); + } + return; + }; + var userList = window.document.querySelector("#userlist"); + userList.onclick = function(e2) { + if((main.personal.group & 4) == 0) { + return; + } + var el = e2.target; + if(userList == el) { + return; + } + if(!el.classList.contains("userlist_item")) { + el = el.parentElement; + } + var name = ""; + if(el.children.length == 1) { + name = el.lastElementChild.innerText; + } + main.send({ type : "SetLeader", setLeader : { clientName : name}}); + return; + }; + client_Buttons.split = new Split(["#chatwrap","#videowrap"],{ sizes : [40,60], onDragEnd : function() { + return window.dispatchEvent(new Event("resize")); + }, minSize : 185, snapOffset : 0}); + var userlistToggle = window.document.querySelector("#userlisttoggle"); + userlistToggle.onclick = function(e3) { + var style = window.document.querySelector("#userlist").style; + if(style.display == "none") { + userlistToggle.classList.add("glyphicon-chevron-down"); + userlistToggle.classList.remove("glyphicon-chevron-right"); + return style.display = "block"; + } else { + userlistToggle.classList.add("glyphicon-chevron-right"); + userlistToggle.classList.remove("glyphicon-chevron-down"); + return style.display = "none"; + } + }; + window.document.querySelector("#usercount").onclick = userlistToggle.onclick; + var extendPlayer = window.document.querySelector("#extendplayer"); + extendPlayer.onclick = function(e4) { + if(extendPlayer.classList.contains("active")) { + client_Buttons.split.setSizes([40,60]); + window.document.querySelector("#userlist").style.width = "90px"; + } else { + client_Buttons.split.setSizes([20,80]); + window.document.querySelector("#userlist").style.width = "80px"; + } + extendPlayer.classList.toggle("active"); + return window.dispatchEvent(new Event("resize")); + }; + window.document.querySelector("#mediarefresh").onclick = function(e5) { + main.refreshPlayer(); + return; + }; + window.document.querySelector("#fullscreenbtn").onclick = function(e6) { + return client_Utils.toggleFullScreen(window.document.querySelector("#ytapiplayer")); + }; + var getPlaylist = window.document.querySelector("#getplaylist"); + getPlaylist.onclick = function(e7) { + client_Utils.copyToClipboard(main.getPlaylistLinks().join(",")); + var icon = getPlaylist.firstElementChild; + icon.classList.remove("glyphicon-link"); + icon.classList.add("glyphicon-ok"); + return haxe_Timer.delay(function() { + icon.classList.add("glyphicon-link"); + icon.classList.remove("glyphicon-ok"); + return; + },2000); + }; + window.document.querySelector("#clearplaylist").onclick = function(e8) { + if(!window.confirm(Lang.get("clearPlaylistConfirm"))) { + return; + } + main.send({ type : "ClearPlaylist"}); + return; + }; + window.document.querySelector("#shuffleplaylist").onclick = function(e9) { + if(!window.confirm(Lang.get("shufflePlaylistConfirm"))) { + return; + } + main.send({ type : "ShufflePlaylist"}); + return; + }; + window.document.querySelector("#showmediaurl").onclick = function(e10) { + window.document.querySelector("#showmediaurl").classList.toggle("collapsed"); + window.document.querySelector("#showmediaurl").classList.toggle("active"); + return window.document.querySelector("#addfromurl").classList.toggle("collapse"); + }; + window.onresize = client_Buttons.onVideoResize; + window.dispatchEvent(new Event("resize")); +}; +client_Buttons.onVideoResize = function() { + var height = window.document.querySelector("#ytapiplayer").offsetHeight - window.document.querySelector("#chatline").offsetHeight; + window.document.querySelector("#messagebuffer").style.height = "" + height + "px"; + window.document.querySelector("#userlist").style.height = "" + height + "px"; +}; +client_Buttons.initChatInput = function(main) { + var guestName = window.document.querySelector("#guestname"); + guestName.onkeydown = function(e) { + if(guestName.value.length == 0) { + return; + } + if(e.keyCode == 13) { + main.send({ type : "Login", login : { clientName : guestName.value}}); + } + return; + }; + var chatLine = window.document.querySelector("#chatline"); + chatLine.onkeydown = function(e1) { + switch(e1.keyCode) { + case 13: + if(chatLine.value.length == 0) { + return; + } + main.send({ type : "Message", message : { clientName : "", text : chatLine.value}}); + client_Buttons.personalHistory.push(chatLine.value); + if(client_Buttons.personalHistory.length > 50) { + client_Buttons.personalHistory.shift(); + } + client_Buttons.personalHistoryId = -1; + chatLine.value = ""; + break; + case 38: + client_Buttons.personalHistoryId--; + if(client_Buttons.personalHistoryId == -2) { + client_Buttons.personalHistoryId = client_Buttons.personalHistory.length - 1; + if(client_Buttons.personalHistoryId == -1) { + return; + } + } else if(client_Buttons.personalHistoryId == -1) { + client_Buttons.personalHistoryId++; + } + chatLine.value = client_Buttons.personalHistory[client_Buttons.personalHistoryId]; + break; + case 40: + if(client_Buttons.personalHistoryId == -1) { + return; + } + client_Buttons.personalHistoryId++; + if(client_Buttons.personalHistoryId > client_Buttons.personalHistory.length - 1) { + client_Buttons.personalHistoryId = -1; + chatLine.value = ""; + return; + } + chatLine.value = client_Buttons.personalHistory[client_Buttons.personalHistoryId]; + break; + } + }; +}; +var client_Main = function(host,port) { + if(port == null) { + port = 4201; + } + this.matchNumbers = new EReg("^-?[0-9]+$",""); + this.onTimeGet = new haxe_Timer(2000); + this.isConnected = false; + this.personal = new Client("Unknown",0); + this.filters = []; + this.globalIp = ""; + this.pageTitle = window.document.title; + this.clients = []; + var _gthis = this; + this.player = new client_Player(this); + if(host == null) { + host = window.location.hostname; + } + if(host == "") { + host = "localhost"; + } + this.host = host; + this.initListeners(); + this.onTimeGet.run = function() { + if(_gthis.player.isListEmpty()) { + return; + } + _gthis.send({ type : "GetTime"}); + return; + }; + window.document.onvisibilitychange = function() { + if(!window.document.hidden && _gthis.onBlinkTab != null) { + window.document.title = _gthis.getPageTitle(); + _gthis.onBlinkTab.stop(); + _gthis.onBlinkTab = null; + } + return; + }; + Lang.init("langs",function() { + _gthis.openWebSocket(host,port); + return; + }); +}; +client_Main.__name__ = true; +client_Main.main = function() { + new client_Main(); +}; +client_Main.prototype = { + openWebSocket: function(host,port) { + var _gthis = this; + this.ws = new WebSocket("ws://" + host + ":" + port); + this.ws.onmessage = $bind(this,this.onMessage); + this.ws.onopen = function() { + _gthis.serverMessage(1); + return _gthis.isConnected = true; + }; + this.ws.onclose = function() { + if(_gthis.isConnected) { + _gthis.serverMessage(2); + } + _gthis.isConnected = false; + _gthis.player.pause(); + return haxe_Timer.delay(function() { + _gthis.openWebSocket(host,port); + return; + },2000); + }; + } + ,initListeners: function() { + var _gthis = this; + client_Buttons.init(this); + client_MobileView.init(); + window.document.querySelector("#leader_btn").onclick = function(e) { + _gthis.setLeaderButton((_gthis.personal.group & 2) == 0); + _gthis.send({ type : "SetLeader", setLeader : { clientName : (_gthis.personal.group & 2) != 0 ? "" : _gthis.personal.name}}); + return; + }; + window.document.querySelector("#queue_next").onclick = function(e1) { + _gthis.addVideoUrl(false); + return; + }; + window.document.querySelector("#queue_end").onclick = function(e2) { + _gthis.addVideoUrl(true); + return; + }; + window.document.querySelector("#mediaurl").onkeydown = function(e3) { + if(e3.keyCode == 13) { + _gthis.addVideoUrl(true); + } + }; + } + ,addVideoUrl: function(atEnd) { + var _gthis = this; + var mediaUrl = window.document.querySelector("#mediaurl"); + var url = mediaUrl.value; + if(url.length == 0) { + return; + } + mediaUrl.value = ""; + var _this_r = new RegExp(",(https?)","g".split("u").join("")); + var links = url.replace(_this_r,"|$1").split("|"); + this.addVideo(atEnd || this.player.isListEmpty() ? links.shift() : links.pop(),atEnd,function() { + _gthis.addVideoArray(links,atEnd); + return; + }); + } + ,addVideoArray: function(links,atEnd) { + var _gthis = this; + if(links.length == 0) { + return; + } + this.addVideo(atEnd ? links.shift() : links.pop(),atEnd,function() { + _gthis.addVideoArray(links,atEnd); + return; + }); + } + ,addVideo: function(url,atEnd,callback) { + var _gthis = this; + var protocol = window.location.protocol; + if(StringTools.startsWith(url,"/")) { + url = "" + protocol + "//" + window.location.hostname + ":" + window.location.port + url; + } + if(!StringTools.startsWith(url,"http")) { + url = "" + protocol + "//" + url; + } + var pos = url.lastIndexOf("/") + 1; + var name = HxOverrides.substr(url,pos,null); + var matchName = new EReg("^(.+)\\.",""); + if(matchName.match(name)) { + name = matchName.matched(1); + } else { + name = Lang.get("rawVideo"); + } + this.getRemoteVideoDuration(url,function(duration) { + _gthis.send({ type : "AddVideo", addVideo : { item : { url : url, title : name, author : _gthis.personal.name, duration : duration}, atEnd : atEnd}}); + callback(); + return; + }); + } + ,refreshPlayer: function() { + this.player.refresh(); + } + ,getPlaylistLinks: function() { + var items = this.player.getItems(); + var _g = []; + var _g1 = 0; + while(_g1 < items.length) _g.push(items[_g1++].url); + return _g; + } + ,replaceLocalIp: function(url) { + if(this.host == this.globalIp) { + return url; + } + return StringTools.replace(url,this.globalIp,this.host); + } + ,getRemoteVideoDuration: function(src,callback) { + var player = window.document.querySelector("#ytapiplayer"); + var video = window.document.createElement("video"); + video.src = src; + video.onerror = function(e) { + callback(0); + return; + }; + video.onloadedmetadata = function() { + if(player.contains(video)) { + player.removeChild(video); + } + callback(video.duration); + return; + }; + client_Utils.prepend(player,video); + } + ,onMessage: function(e) { + var data = JSON.parse(e.data); + var t = data.type; + var t1 = t.charAt(0).toLowerCase() + HxOverrides.substr(t,1,null); + haxe_Log.trace("Event: " + data.type,{ fileName : "src/client/Main.hx", lineNumber : 188, className : "client.Main", methodName : "onMessage", customParams : [data[t1]]}); + switch(data.type) { + case "AddVideo": + if(this.player.isListEmpty()) { + this.player.setVideo(data.addVideo.item); + } + this.player.addVideoItem(data.addVideo.item,data.addVideo.atEnd); + break; + case "ClearChat": + window.document.querySelector("#messagebuffer").innerHTML = ""; + break; + case "ClearPlaylist": + this.player.clearItems(); + if(this.player.isListEmpty()) { + this.player.pause(); + } + break; + case "Connected": + this.onConnected(data); + this.onTimeGet.run(); + break; + case "GetTime": + var newTime = data.getTime.time; + var time = this.player.getTime(); + if((this.personal.group & 1 << ClientGroup.Leader._hx_index) != 0) { + if(Math.abs(time - newTime) < 2) { + return; + } + this.player.setTime(time,false); + return; + } + if(!data.getTime.paused) { + this.player.play(); + } else { + this.player.pause(); + } + if(Math.abs(time - newTime) < 2) { + return; + } + this.player.setTime(newTime); + break; + case "Login": + this.onLogin(data.login.clients,data.login.clientName); + break; + case "LoginError": + var text = StringTools.replace(Lang.get("usernameError"),"$MAX","" + this.config.maxLoginLength); + this.serverMessage(4,text); + break; + case "Logout": + this.updateClients(data.logout.clients); + this.personal = new Client(data.logout.clientName,0); + this.showGuestLoginPanel(); + break; + case "Message": + this.addMessage(data.message.clientName,data.message.text); + break; + case "Pause": + if((this.personal.group & 1 << ClientGroup.Leader._hx_index) != 0) { + return; + } + this.player.pause(); + this.player.setTime(data.pause.time); + break; + case "Play": + if((this.personal.group & 1 << ClientGroup.Leader._hx_index) != 0) { + return; + } + this.player.setTime(data.play.time); + this.player.play(); + break; + case "RemoveVideo": + this.player.removeItem(data.removeVideo.url); + if(this.player.isListEmpty()) { + this.player.pause(); + } + break; + case "Rewind": + this.player.setTime(data.rewind.time); + break; + case "SetLeader": + ClientTools.setLeader(this.clients,data.setLeader.clientName); + this.updateUserList(); + this.setLeaderButton((this.personal.group & 1 << ClientGroup.Leader._hx_index) != 0); + if((this.personal.group & 1 << ClientGroup.Leader._hx_index) != 0) { + this.player.setTime(this.player.getTime(),false); + } + break; + case "SetTime": + var newTime1 = data.setTime.time; + var time1 = this.player.getTime(); + if(Math.abs(time1 - newTime1) < 2) { + return; + } + this.player.setTime(newTime1); + break; + case "ShufflePlaylist": + break; + case "UpdateClients": + this.updateClients(data.updateClients.clients); + this.personal = ClientTools.getByName(this.clients,this.personal.name,this.personal); + break; + case "UpdatePlaylist": + this.player.setItems(data.updatePlaylist.videoList); + break; + case "VideoLoaded": + this.player.setTime(0); + this.player.play(); + break; + } + } + ,onConnected: function(data) { + var connected = data.connected; + this.globalIp = connected.globalIp; + this.setConfig(connected.config); + if(connected.isUnknownClient) { + this.updateClients(connected.clients); + this.personal = ClientTools.getByName(this.clients,connected.clientName,this.personal); + this.showGuestLoginPanel(); + } else { + this.onLogin(connected.clients,connected.clientName); + } + var guestName = window.document.querySelector("#guestname"); + if(guestName.value.length > 0) { + this.send({ type : "Login", login : { clientName : guestName.value}}); + } + var _g = 0; + var _g1 = connected.history; + while(_g < _g1.length) { + var message = _g1[_g]; + ++_g; + this.addMessage(message.name,message.text,message.time); + } + this.player.setItems(connected.videoList); + } + ,setConfig: function(config) { + this.config = config; + this.pageTitle = config.channelName; + window.document.querySelector("#guestname").maxLength = config.maxLoginLength; + window.document.querySelector("#chatline").maxLength = config.maxMessageLength; + this.filters.length = 0; + var _g = 0; + var _g1 = config.filters; + while(_g < _g1.length) { + var filter = _g1[_g]; + ++_g; + this.filters.push({ regex : new EReg(filter.regex,filter.flags), replace : filter.replace}); + } + var _g2 = 0; + var _g3 = config.emotes; + while(_g2 < _g3.length) { + var emote = _g3[_g2]; + ++_g2; + this.filters.push({ regex : new EReg(this.escapeRegExp(emote.name),"g"), replace : "<img class=\"channel-emote\" src=\"" + emote.image + "\" title=\"" + emote.name + "\"/>"}); + } + var smilesWrap = window.document.querySelector("#smileswrap"); + smilesWrap.onclick = function(e) { + var el = e.target; + var form = window.document.querySelector("#chatline"); + form.value += " " + el.title; + form.focus(); + return; + }; + smilesWrap.innerHTML = ""; + var _g4 = 0; + var _g5 = config.emotes; + while(_g4 < _g5.length) { + var emote1 = _g5[_g4]; + ++_g4; + var img = window.document.createElement("img"); + img.className = "smile-preview"; + img.src = emote1.image; + img.title = emote1.name; + smilesWrap.appendChild(img); + } + } + ,onLogin: function(data,clientName) { + this.updateClients(data); + var newPersonal = ClientTools.getByName(this.clients,clientName); + if(newPersonal == null) { + return; + } + this.personal = newPersonal; + this.hideGuestLoginPanel(); + } + ,showGuestLoginPanel: function() { + window.document.querySelector("#guestlogin").style.display = "block"; + window.document.querySelector("#chatline").style.display = "none"; + } + ,hideGuestLoginPanel: function() { + window.document.querySelector("#guestlogin").style.display = "none"; + window.document.querySelector("#chatline").style.display = "block"; + } + ,updateClients: function(newClients) { + this.clients.length = 0; + var _g = 0; + while(_g < newClients.length) this.clients.push(Client.fromData(newClients[_g++])); + this.updateUserList(); + } + ,send: function(data) { + if(!this.isConnected) { + return; + } + this.ws.send(JSON.stringify(data)); + } + ,serverMessage: function(type,text) { + var msgBuf = window.document.querySelector("#messagebuffer"); + var div = window.document.createElement("div"); + var time = "[" + new Date().toTimeString().split(" ")[0] + "] "; + switch(type) { + case 1: + div.className = "server-msg-reconnect"; + div.innerHTML = Lang.get("msgConnected"); + break; + case 2: + div.className = "server-msg-disconnect"; + div.innerHTML = Lang.get("msgDisconnected"); + break; + case 3: + div.className = "server-whisper"; + div.innerHTML = time + text + " " + Lang.get("entered"); + break; + case 4: + div.className = "server-whisper"; + div.innerHTML = time + text; + break; + default: + } + msgBuf.appendChild(div); + msgBuf.scrollTop = msgBuf.scrollHeight; + } + ,updateUserList: function() { + window.document.querySelector("#usercount").innerHTML = this.clients.length + " " + Lang.get("online"); + window.document.title = this.getPageTitle(); + var list_b = ""; + var _g = 0; + var _g1 = this.clients; + while(_g < _g1.length) { + var client1 = _g1[_g]; + ++_g; + list_b += "<div class=\"userlist_item\">"; + if((client1.group & 2) != 0) { + list_b += "<span class=\"glyphicon glyphicon-star-empty\"></span>"; + } + list_b += Std.string("<span class=\"" + ((client1.group & 4) != 0 ? "userlist_owner" : "") + "\">" + client1.name + "</span></div>"); + } + window.document.querySelector("#userlist").innerHTML = list_b; + } + ,getPageTitle: function() { + return "" + this.pageTitle + " (" + this.clients.length + ")"; + } + ,addMessage: function(name,text,time) { + var _gthis = this; + var msgBuf = window.document.querySelector("#messagebuffer"); + var userDiv = window.document.createElement("div"); + userDiv.className = "chat-msg-" + name; + var tstamp = window.document.createElement("span"); + tstamp.className = "timestamp"; + if(time == null) { + time = "[" + new Date().toTimeString().split(" ")[0] + "] "; + } + tstamp.innerHTML = time; + var nameDiv = window.document.createElement("strong"); + nameDiv.className = "username"; + nameDiv.innerHTML = name + ": "; + var textDiv = window.document.createElement("span"); + if(StringTools.startsWith(text,"/")) { + if(name == this.personal.name) { + this.handleCommands(HxOverrides.substr(text,1,null)); + } + } else { + var _g = 0; + var _g1 = this.filters; + while(_g < _g1.length) { + var filter = _g1[_g]; + ++_g; + text = text.replace(filter.regex.r,filter.replace); + } + } + textDiv.innerHTML = text; + var isInChatEnd = msgBuf.scrollHeight - msgBuf.scrollTop == msgBuf.clientHeight; + userDiv.appendChild(tstamp); + userDiv.appendChild(nameDiv); + userDiv.appendChild(textDiv); + msgBuf.appendChild(userDiv); + if(isInChatEnd) { + while(msgBuf.children.length > 200) msgBuf.removeChild(msgBuf.firstChild); + msgBuf.scrollTop = msgBuf.scrollHeight; + } + if(name == this.personal.name) { + msgBuf.scrollTop = msgBuf.scrollHeight; + } + if(window.document.hidden && this.onBlinkTab == null) { + this.onBlinkTab = new haxe_Timer(1000); + this.onBlinkTab.run = function() { + if(StringTools.startsWith(window.document.title,_gthis.pageTitle)) { + return window.document.title = "*Chat*"; + } else { + return window.document.title = _gthis.getPageTitle(); + } + }; + this.onBlinkTab.run(); + } + } + ,handleCommands: function(text) { + if(text == "clear") { + if((this.personal.group & 4) != 0) { + this.send({ type : "ClearChat"}); + } + } + if(this.matchNumbers.match(text)) { + this.send({ type : "Rewind", rewind : { time : Std.parseInt(text)}}); + } + } + ,setLeaderButton: function(flag) { + var leaderBtn = window.document.querySelector("#leader_btn"); + if((this.personal.group & 2) != 0) { + leaderBtn.classList.add("label-success"); + } else { + leaderBtn.classList.remove("label-success"); + } + } + ,escapeRegExp: function(regex) { + var _this_r = new RegExp("([.*+?^${}()|[\\]\\\\])","g".split("u").join("")); + return regex.replace(_this_r,"\\$1"); + } +}; +var client_MobileView = function() { }; +client_MobileView.__name__ = true; +client_MobileView.init = function() { + var mvbtn = window.document.querySelector("#mv_btn"); + mvbtn.onclick = function(e) { + if(client_Utils.toggleFullScreen(window.document.documentElement)) { + window.document.body.classList.add("mobile-view"); + mvbtn.classList.add("active"); + var vwrap = window.document.querySelector("#videowrap"); + if(vwrap.children[0] == window.document.querySelector("currenttitle")) { + vwrap.appendChild(vwrap.children[0]); + } + } else { + window.document.body.classList.remove("mobile-view"); + mvbtn.classList.remove("active"); + var vwrap1 = window.document.querySelector("videowrap"); + if(vwrap1.children[0] != window.document.querySelector("currenttitle")) { + vwrap1.insertBefore(vwrap1.children[1],vwrap1.children[0]); + } + } + return; + }; +}; +var client_Player = function(main) { + this.skipSetTime = false; + this.isLoaded = false; + this.player = window.document.querySelector("#ytapiplayer"); + this.videoItemsEl = window.document.querySelector("#queue"); + this.items = []; + this.main = main; +}; +client_Player.__name__ = true; +client_Player.prototype = { + setVideo: function(item) { + var _gthis = this; + this.isLoaded = false; + this.video = window.document.createElement("video"); + this.video.id = "videoplayer"; + item.url = this.main.replaceLocalIp(item.url); + this.video.src = item.url; + this.video.controls = true; + this.video.oncanplaythrough = function(e) { + if(!_gthis.isLoaded) { + _gthis.main.send({ type : "VideoLoaded"}); + } + return _gthis.isLoaded = true; + }; + this.video.onseeking = function(e1) { + if(_gthis.skipSetTime) { + _gthis.skipSetTime = false; + return; + } + if((_gthis.main.personal.group & 2) == 0) { + return; + } + _gthis.main.send({ type : "SetTime", setTime : { time : _gthis.video.currentTime}}); + return; + }; + this.video.onpause = function(e2) { + if((_gthis.main.personal.group & 2) == 0) { + return; + } + _gthis.main.send({ type : "Pause", pause : { time : _gthis.video.currentTime}}); + return; + }; + this.video.onplay = function(e3) { + if((_gthis.main.personal.group & 2) == 0) { + return; + } + _gthis.main.send({ type : "Play", play : { time : _gthis.video.currentTime}}); + return; + }; + this.player.innerHTML = ""; + this.player.appendChild(this.video); + window.document.querySelector("#currenttitle").innerHTML = item.title; + } + ,addVideoItem: function(item,atEnd) { + var _gthis = this; + this.items.push(item); + var itemEl = this.nodeFromString("<li class=\"queue_entry pluid-0 queue_temp queue_active\" title=\"" + Lang.get("addedBy") + ": " + item.author + "\">\n\t\t\t\t<a class=\"qe_title\" href=\"" + item.url + "\" target=\"_blank\">" + item.title + "</a>\n\t\t\t\t<span class=\"qe_time\">" + this.duration(item.duration) + "</span>\n\t\t\t\t<div class=\"qe_clear\"></div>\n\t\t\t\t<div class=\"btn-group\" style=\"display: inline-block;\">\n\t\t\t\t\t<button class=\"btn btn-xs btn-default qbtn-play\">\n\t\t\t\t\t\t<span class=\"glyphicon glyphicon-play\"></span>" + Lang.get("play") + "\n\t\t\t\t\t</button>\n\t\t\t\t\t<button class=\"btn btn-xs btn-default qbtn-next\">\n\t\t\t\t\t\t<span class=\"glyphicon glyphicon-share-alt\"></span>" + Lang.get("skip") + "\n\t\t\t\t\t</button>\n\t\t\t\t\t<button class=\"btn btn-xs btn-default qbtn-tmp\">\n\t\t\t\t\t\t<span class=\"glyphicon glyphicon-flag\"></span>" + Lang.get("makePermanent") + "\n\t\t\t\t\t</button>\n\t\t\t\t\t<button class=\"btn btn-xs btn-default qbtn-delete\" id=\"btn-delete\">\n\t\t\t\t\t\t<span class=\"glyphicon glyphicon-trash\"></span>" + Lang.get("delete") + "\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</li>"); + itemEl.querySelector("#btn-delete").onclick = function(e) { + _gthis.main.send({ type : "RemoveVideo", removeVideo : { url : itemEl.querySelector(".qe_title").getAttribute("href")}}); + return; + }; + if(atEnd) { + this.videoItemsEl.appendChild(itemEl); + } else { + client_Utils.insertAtIndex(this.videoItemsEl,itemEl,1); + } + this.updateCounters(); + } + ,removeVideo: function() { + if(this.video == null) { + return; + } + this.player.removeChild(this.video); + this.video = null; + window.document.querySelector("#currenttitle").innerHTML = Lang.get("nothingPlaying"); + } + ,removeItem: function(url) { + var _g = 0; + var _g1 = this.videoItemsEl.children; + while(_g < _g1.length) { + var child = _g1[_g]; + ++_g; + if(child.querySelector(".qe_title").getAttribute("href") == url) { + this.videoItemsEl.removeChild(child); + break; + } + } + HxOverrides.remove(this.items,Lambda.find(this.items,function(item) { + return item.url == url; + })); + if(this.video.src == url) { + if(this.items.length > 0) { + this.setVideo(this.items[0]); + } + } + this.updateCounters(); + } + ,updateCounters: function() { + var tmp = "" + this.items.length + " "; + var tmp1 = Lang.get("videos"); + window.document.querySelector("#plcount").innerHTML = tmp + tmp1; + window.document.querySelector("#pllength").innerHTML = this.totalDuration(); + } + ,getItems: function() { + return this.items; + } + ,setItems: function(list) { + this.clearItems(); + if(list.length == 0) { + return; + } + if(this.video == null || this.video.src != list[0].url) { + this.setVideo(list[0]); + } + var _g = 0; + while(_g < list.length) this.addVideoItem(list[_g++],true); + } + ,clearItems: function() { + this.items.length = 0; + this.videoItemsEl.innerHTML = ""; + this.updateCounters(); + } + ,refresh: function() { + if(this.items.length == 0) { + return; + } + this.removeVideo(); + this.setVideo(this.items[0]); + } + ,duration: function(time) { + var h = time / 60 / 60 | 0; + var m = (time / 60 | 0) - h * 60; + var s = time % 60 | 0; + var time1 = "" + m + ":"; + if(m < 10) { + time1 = "0" + time1; + } + if(h > 0) { + time1 = "" + h + ":" + time1; + } + if(s < 10) { + time1 += "0"; + } + time1 += s; + return time1; + } + ,totalDuration: function() { + var time = 0.0; + var _g = 0; + var _g1 = this.items; + while(_g < _g1.length) time += _g1[_g++].duration; + return this.duration(time); + } + ,nodeFromString: function(div) { + var wrapper = window.document.createElement("div"); + wrapper.innerHTML = div; + return wrapper.firstElementChild; + } + ,isListEmpty: function() { + return this.items.length == 0; + } + ,pause: function() { + if(this.video == null) { + return; + } + this.video.pause(); + } + ,play: function() { + if(this.video == null) { + return; + } + this.video.play(); + } + ,setTime: function(time,isLocal) { + if(isLocal == null) { + isLocal = true; + } + if(this.video == null) { + return; + } + this.skipSetTime = isLocal; + this.video.currentTime = time; + } + ,getTime: function() { + if(this.video == null) { + return 0; + } + return this.video.currentTime; + } +}; +var client_Utils = function() { }; +client_Utils.__name__ = true; +client_Utils.prepend = function(parent,child) { + if(parent.firstChild == null) { + parent.appendChild(child); + } else { + parent.insertBefore(child,parent.firstChild); + } +}; +client_Utils.insertAtIndex = function(parent,child,i) { + if(i >= parent.children.length) { + parent.appendChild(child); + } else { + parent.insertBefore(child,parent.children[i]); + } +}; +client_Utils.toggleFullScreen = function(el) { + var state = true; + var doc = window.document; + var el2 = el; + if(window.document.fullscreenElement == null && doc.mozFullScreenElement == null && doc.webkitFullscreenElement == null) { + if(el.requestFullscreen != null) { + el.requestFullscreen(); + } else if(el2.mozRequestFullScreen != null) { + el2.mozRequestFullScreen(); + } else if(el2.webkitRequestFullscreen != null) { + el2.webkitRequestFullscreen(HTMLElement.ALLOW_KEYBOARD_INPUT); + } else { + state = false; + } + } else { + if(doc.cancelFullScreen != null) { + doc.cancelFullScreen(); + } else if(doc.mozCancelFullScreen != null) { + doc.mozCancelFullScreen(); + } else if(doc.webkitCancelFullScreen != null) { + doc.webkitCancelFullScreen(); + } + state = false; + } + return state; +}; +client_Utils.copyToClipboard = function(text) { + var clipboardData = window.clipboardData; + if(clipboardData != null && clipboardData.setData != null) { + clipboardData.setData("Text",text); + return; + } else if(window.document.queryCommandSupported != null) { + var textarea = window.document.createElement("textarea"); + textarea.textContent = text; + textarea.style.position = "fixed"; + window.document.body.appendChild(textarea); + textarea.select(); + window.document.execCommand("copy"); + window.document.body.removeChild(textarea); + } +}; +var haxe_Log = function() { }; +haxe_Log.__name__ = true; +haxe_Log.formatOutput = function(v,infos) { + var str = Std.string(v); + if(infos == null) { + return str; + } + var pstr = infos.fileName + ":" + infos.lineNumber; + if(infos.customParams != null) { + var _g = 0; + var _g1 = infos.customParams; + while(_g < _g1.length) str += ", " + Std.string(_g1[_g++]); + } + return pstr + ": " + str; +}; +haxe_Log.trace = function(v,infos) { + var str = haxe_Log.formatOutput(v,infos); + if(typeof(console) != "undefined" && console.log != null) { + console.log(str); + } +}; +var haxe_Timer = function(time_ms) { + var me = this; + this.id = setInterval(function() { + me.run(); + },time_ms); +}; +haxe_Timer.__name__ = true; +haxe_Timer.delay = function(f,time_ms) { + var t = new haxe_Timer(time_ms); + t.run = function() { + t.stop(); + f(); + }; + return t; +}; +haxe_Timer.prototype = { + stop: function() { + if(this.id == null) { + return; + } + clearInterval(this.id); + this.id = null; + } + ,run: function() { + } +}; +var haxe_http_HttpBase = function(url) { + this.url = url; + this.headers = []; + this.params = []; + this.emptyOnData = $bind(this,this.onData); +}; +haxe_http_HttpBase.__name__ = true; +haxe_http_HttpBase.prototype = { + onData: function(data) { + } + ,onBytes: function(data) { + } + ,onError: function(msg) { + } + ,onStatus: function(status) { + } + ,hasOnData: function() { + return !Reflect.compareMethods($bind(this,this.onData),this.emptyOnData); + } + ,success: function(data) { + this.responseBytes = data; + this.responseAsString = null; + if(this.hasOnData()) { + this.onData(this.get_responseData()); + } + this.onBytes(this.responseBytes); + } + ,get_responseData: function() { + if(this.responseAsString == null && this.responseBytes != null) { + this.responseAsString = this.responseBytes.getString(0,this.responseBytes.length,haxe_io_Encoding.UTF8); + } + return this.responseAsString; + } +}; +var haxe_http_HttpJs = function(url) { + this.async = true; + this.withCredentials = false; + haxe_http_HttpBase.call(this,url); +}; +haxe_http_HttpJs.__name__ = true; +haxe_http_HttpJs.__super__ = haxe_http_HttpBase; +haxe_http_HttpJs.prototype = $extend(haxe_http_HttpBase.prototype,{ + request: function(post) { + var _gthis = this; + this.responseAsString = null; + this.responseBytes = null; + var r = this.req = js_Browser.createXMLHttpRequest(); + var onreadystatechange = function(_) { + if(r.readyState != 4) { + return; + } + var s; + try { + s = r.status; + } catch( e ) { + s = null; + } + if(s == 0 && typeof(window) != "undefined") { + var protocol = window.location.protocol.toLowerCase(); + if(new EReg("^(?:about|app|app-storage|.+-extension|file|res|widget):$","").match(protocol)) { + s = r.response != null ? 200 : 404; + } + } + if(s == undefined) { + s = null; + } + if(s != null) { + _gthis.onStatus(s); + } + if(s != null && s >= 200 && s < 400) { + _gthis.req = null; + var onreadystatechange1 = haxe_io_Bytes.ofData(r.response); + _gthis.success(onreadystatechange1); + } else if(s == null) { + _gthis.req = null; + _gthis.onError("Failed to connect or resolve host"); + } else if(s == null) { + _gthis.req = null; + _gthis.responseBytes = haxe_io_Bytes.ofData(r.response); + _gthis.onError("Http Error #" + r.status); + } else { + switch(s) { + case 12007: + _gthis.req = null; + _gthis.onError("Unknown host"); + break; + case 12029: + _gthis.req = null; + _gthis.onError("Failed to connect to host"); + break; + default: + _gthis.req = null; + _gthis.responseBytes = haxe_io_Bytes.ofData(r.response); + _gthis.onError("Http Error #" + r.status); + } + } + }; + if(this.async) { + r.onreadystatechange = onreadystatechange; + } + var _g = this.postBytes; + var _g1 = this.postData; + var uri = _g1 == null ? _g == null ? null : new Blob([_g.b.bufferValue]) : _g == null ? _g1 : null; + if(uri != null) { + post = true; + } else { + var _g2 = 0; + var _g3 = this.params; + while(_g2 < _g3.length) { + var p = _g3[_g2]; + ++_g2; + if(uri == null) { + uri = ""; + } else { + uri = Std.string(uri) + "&"; + } + var s1 = p.name; + var value = Std.string(uri) + encodeURIComponent(s1) + "="; + var s2 = p.value; + uri = value + encodeURIComponent(s2); + } + } + try { + if(post) { + r.open("POST",this.url,this.async); + } else if(uri != null) { + r.open("GET",this.url + (this.url.split("?").length <= 1 ? "?" : "&") + Std.string(uri),this.async); + uri = null; + } else { + r.open("GET",this.url,this.async); + } + r.responseType = "arraybuffer"; + } catch( e1 ) { + var e2 = ((e1) instanceof js__$Boot_HaxeError) ? e1.val : e1; + this.req = null; + this.onError(e2.toString()); + return; + } + r.withCredentials = this.withCredentials; + if(!Lambda.exists(this.headers,function(h) { + return h.name == "Content-Type"; + }) && post && this.postData == null) { + r.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); + } + var _g21 = 0; + var _g31 = this.headers; + while(_g21 < _g31.length) { + var h1 = _g31[_g21]; + ++_g21; + r.setRequestHeader(h1.name,h1.value); + } + r.send(uri); + if(!this.async) { + onreadystatechange(null); + } + } +}); +var haxe_io_Bytes = function(data) { + this.length = data.byteLength; + this.b = new Uint8Array(data); + this.b.bufferValue = data; + data.hxBytes = this; + data.bytes = this.b; +}; +haxe_io_Bytes.__name__ = true; +haxe_io_Bytes.ofData = function(b) { + var hb = b.hxBytes; + if(hb != null) { + return hb; + } + return new haxe_io_Bytes(b); +}; +haxe_io_Bytes.prototype = { + getString: function(pos,len,encoding) { + if(pos < 0 || len < 0 || pos + len > this.length) { + throw new js__$Boot_HaxeError(haxe_io_Error.OutsideBounds); + } + if(encoding == null) { + encoding = haxe_io_Encoding.UTF8; + } + var s = ""; + var b = this.b; + var i = pos; + var max = pos + len; + switch(encoding._hx_index) { + case 0: + while(i < max) { + var c = b[i++]; + if(c < 128) { + if(c == 0) { + break; + } + s += String.fromCodePoint(c); + } else if(c < 224) { + var code = (c & 63) << 6 | b[i++] & 127; + s += String.fromCodePoint(code); + } else if(c < 240) { + var code1 = (c & 31) << 12 | (b[i++] & 127) << 6 | b[i++] & 127; + s += String.fromCodePoint(code1); + } else { + var u = (c & 15) << 18 | (b[i++] & 127) << 12 | (b[i++] & 127) << 6 | b[i++] & 127; + s += String.fromCodePoint(u); + } + } + break; + case 1: + while(i < max) { + var c1 = b[i++] | b[i++] << 8; + s += String.fromCodePoint(c1); + } + break; + } + return s; + } +}; +var haxe_io_Encoding = $hxEnums["haxe.io.Encoding"] = { __ename__ : true, __constructs__ : ["UTF8","RawNative"] + ,UTF8: {_hx_index:0,__enum__:"haxe.io.Encoding",toString:$estr} + ,RawNative: {_hx_index:1,__enum__:"haxe.io.Encoding",toString:$estr} +}; +var haxe_io_Error = $hxEnums["haxe.io.Error"] = { __ename__ : true, __constructs__ : ["Blocked","Overflow","OutsideBounds","Custom"] + ,Blocked: {_hx_index:0,__enum__:"haxe.io.Error",toString:$estr} + ,Overflow: {_hx_index:1,__enum__:"haxe.io.Error",toString:$estr} + ,OutsideBounds: {_hx_index:2,__enum__:"haxe.io.Error",toString:$estr} + ,Custom: ($_=function(e) { return {_hx_index:3,e:e,__enum__:"haxe.io.Error",toString:$estr}; },$_.__params__ = ["e"],$_) +}; +var haxe_io_Path = function(path) { + switch(path) { + case ".":case "..": + this.dir = path; + this.file = ""; + return; + } + var c1 = path.lastIndexOf("/"); + var c2 = path.lastIndexOf("\\"); + if(c1 < c2) { + this.dir = HxOverrides.substr(path,0,c2); + path = HxOverrides.substr(path,c2 + 1,null); + this.backslash = true; + } else if(c2 < c1) { + this.dir = HxOverrides.substr(path,0,c1); + path = HxOverrides.substr(path,c1 + 1,null); + } else { + this.dir = null; + } + var cp = path.lastIndexOf("."); + if(cp != -1) { + this.ext = HxOverrides.substr(path,cp + 1,null); + this.file = HxOverrides.substr(path,0,cp); + } else { + this.ext = null; + this.file = path; + } +}; +haxe_io_Path.__name__ = true; +haxe_io_Path.withoutExtension = function(path) { + var s = new haxe_io_Path(path); + s.ext = null; + return s.toString(); +}; +haxe_io_Path.prototype = { + toString: function() { + return (this.dir == null ? "" : this.dir + (this.backslash ? "\\" : "/")) + this.file + (this.ext == null ? "" : "." + this.ext); + } +}; +var js__$Boot_HaxeError = function(val) { + Error.call(this); + this.val = val; + if(Error.captureStackTrace) { + Error.captureStackTrace(this,js__$Boot_HaxeError); + } +}; +js__$Boot_HaxeError.__name__ = true; +js__$Boot_HaxeError.__super__ = Error; +js__$Boot_HaxeError.prototype = $extend(Error.prototype,{ +}); +var js_Boot = function() { }; +js_Boot.__name__ = true; +js_Boot.__string_rec = function(o,s) { + if(o == null) { + return "null"; + } + if(s.length >= 5) { + return "<...>"; + } + var t = typeof(o); + if(t == "function" && (o.__name__ || o.__ename__)) { + t = "object"; + } + switch(t) { + case "function": + return "<function>"; + case "object": + if(o.__enum__) { + var e = $hxEnums[o.__enum__]; + var n = e.__constructs__[o._hx_index]; + var con = e[n]; + if(con.__params__) { + s = s + "\t"; + return n + "(" + ((function($this) { + var $r; + var _g = []; + { + var _g1 = 0; + var _g2 = con.__params__; + while(true) { + if(!(_g1 < _g2.length)) { + break; + } + var p = _g2[_g1]; + _g1 = _g1 + 1; + _g.push(js_Boot.__string_rec(o[p],s)); + } + } + $r = _g; + return $r; + }(this))).join(",") + ")"; + } else { + return n; + } + } + if(((o) instanceof Array)) { + var str = "["; + s += "\t"; + var _g3 = 0; + var _g11 = o.length; + while(_g3 < _g11) { + var i = _g3++; + str += (i > 0 ? "," : "") + js_Boot.__string_rec(o[i],s); + } + str += "]"; + return str; + } + var tostr; + try { + tostr = o.toString; + } catch( e1 ) { + var e2 = ((e1) instanceof js__$Boot_HaxeError) ? e1.val : e1; + return "???"; + } + if(tostr != null && tostr != Object.toString && typeof(tostr) == "function") { + var s2 = o.toString(); + if(s2 != "[object Object]") { + return s2; + } + } + var str1 = "{\n"; + s += "\t"; + var hasp = o.hasOwnProperty != null; + var k = null; + for( k in o ) { + if(hasp && !o.hasOwnProperty(k)) { + continue; + } + if(k == "prototype" || k == "__class__" || k == "__super__" || k == "__interfaces__" || k == "__properties__") { + continue; + } + if(str1.length != 2) { + str1 += ", \n"; + } + str1 += s + k + " : " + js_Boot.__string_rec(o[k],s); + } + s = s.substring(1); + str1 += "\n" + s + "}"; + return str1; + case "string": + return o; + default: + return String(o); + } +}; +var js_Browser = function() { }; +js_Browser.__name__ = true; +js_Browser.createXMLHttpRequest = function() { + if(typeof XMLHttpRequest != "undefined") { + return new XMLHttpRequest(); + } + if(typeof ActiveXObject != "undefined") { + return new ActiveXObject("Microsoft.XMLHTTP"); + } + throw new js__$Boot_HaxeError("Unable to create XMLHttpRequest object."); +}; +function $getIterator(o) { if( o instanceof Array ) return HxOverrides.iter(o); else return o.iterator(); } +function $bind(o,m) { if( m == null ) return null; if( m.__id__ == null ) m.__id__ = $global.$haxeUID++; var f; if( o.hx__closures__ == null ) o.hx__closures__ = {}; else f = o.hx__closures__[m.__id__]; if( f == null ) { f = m.bind(o); o.hx__closures__[m.__id__] = f; } return f; } +$global.$haxeUID |= 0; +var __map_reserved = {}; +if( String.fromCodePoint == null ) String.fromCodePoint = function(c) { return c < 0x10000 ? String.fromCharCode(c) : String.fromCharCode((c>>10)+0xD7C0)+String.fromCharCode((c&0x3FF)+0xDC00); } +String.__name__ = true; +Array.__name__ = true; +Object.defineProperty(js__$Boot_HaxeError.prototype,"message",{ get : function() { + return String(this.val); +}}); +js_Boot.__toStr = ({ }).toString; +Lang.ids = ["en","ru"]; +Lang.langs = new haxe_ds_StringMap(); +Lang.lang = HxOverrides.substr(window.navigator.language,0,2).toLowerCase(); +client_Buttons.personalHistory = []; +client_Buttons.personalHistoryId = -1; +client_Main.main(); +})(typeof window != "undefined" ? window : typeof global != "undefined" ? global : typeof self != "undefined" ? self : this); diff --git a/res/css/custom.css b/res/css/custom.css index e69de29..05b94fa 100644 --- a/res/css/custom.css +++ b/res/css/custom.css @@ -0,0 +1,4 @@ +/* + Create user/res/css/custom.css + in project folder to override this file. +*/ |
