// 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(ws,id,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(null,null,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("#showmediaurl").onclick = function(e5) { 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(null,null,"Unknown",0); this.filters = []; 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.initListeners(); this.onTimeGet.run = function() { _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(); return; }; window.document.querySelector("#queue_end").onclick = function(e2) { _gthis.addVideoUrl(); return; }; window.document.querySelector("#mediaurl").onkeydown = function(e3) { if(e3.keyCode == 13) { _gthis.addVideoUrl(); } }; } ,addVideoUrl: function() { var _gthis = this; var mediaUrl = window.document.querySelector("#mediaurl"); var url = mediaUrl.value; 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(mediaUrl.value,function(duration) { _gthis.send({ type : "AddVideo", addVideo : { item : { url : url, title : name, author : _gthis.personal.name, duration : duration}}}); return; }); mediaUrl.value = ""; } ,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() { player.removeChild(video); callback(video.duration); return; }; this.prepend(player,video); } ,prepend: function(parent,child) { if(parent.firstChild == null) { parent.appendChild(child); } else { parent.insertBefore(child,parent.firstChild); } } ,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 : 149, 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); break; case "ClearChat": window.document.querySelector("#messagebuffer").innerHTML = ""; break; case "Connected": this.onConnected(data); 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(Math.abs(time - newTime) < 2) { return; } this.player.setTime(newTime); if(!data.getTime.paused) { this.player.play(); } else { this.player.pause(); } 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(null,null,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 "UpdateClients": this.updateClients(data.updateClients.clients); this.personal = ClientTools.getByName(this.clients,this.personal.name,this.personal); break; case "VideoLoaded": this.player.setTime(0); this.player.play(); break; } } ,onConnected: function(data) { var connected = data.connected; 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); } var list = connected.videoList; if(list.length == 0) { return; } this.player.setVideo(list[0]); var _g2 = 0; var _g3 = connected.videoList; while(_g2 < _g3.length) this.player.addVideoItem(_g3[_g2++]); } ,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 : ""}); } 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 += "
"; if((client1.group & 2) != 0) { list_b += ""; } list_b += Std.string("" + client1.name + "
"); } 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(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_MobileView.toggleFullScreen()) { 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; }; }; client_MobileView.toggleFullScreen = function() { var state = true; var doc = window.document; if(window.document.fullscreenElement == null && doc.mozFullScreenElement == null && doc.webkitFullscreenElement == null) { if(window.document.documentElement.requestFullscreen != null) { window.document.documentElement.requestFullscreen(); } else if(doc.documentElement.mozRequestFullScreen != null) { doc.documentElement.mozRequestFullScreen(); } else if(doc.documentElement.webkitRequestFullscreen != null) { doc.documentElement.webkitRequestFullscreen(Element.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; }; 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"; 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) { var _gthis = this; this.items.push(item); var itemEl = this.nodeFromString("
  • \n\t\t\t\t" + item.title + "\n\t\t\t\t" + this.duration(item.duration) + "\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
  • "); itemEl.querySelector("#btn-delete").onclick = function(e) { _gthis.main.send({ type : "RemoveVideo", removeVideo : { url : itemEl.querySelector(".qe_title").getAttribute("href")}}); return; }; this.videoItemsEl.appendChild(itemEl); var tmp = "" + this.items.length + " "; var tmp1 = Lang.get("videos"); window.document.querySelector("#plcount").innerHTML = tmp + tmp1; window.document.querySelector("#pllength").innerHTML = this.totalDuration(); } ,removeItem: function(url) { var list = window.document.querySelector("#queue"); var _g = 0; var _g1 = list.children; while(_g < _g1.length) { var child = _g1[_g]; ++_g; if(child.querySelector(".qe_title").getAttribute("href") == url) { list.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]); } } var tmp = "" + this.items.length + " "; var tmp1 = Lang.get("videos"); window.document.querySelector("#plcount").innerHTML = tmp + tmp1; window.document.querySelector("#pllength").innerHTML = this.totalDuration(); } ,duration: function(time) { var h = time / 60 / 60 | 0; var m = time / 60 | 0; 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 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 ""; 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);