diff --git a/changelog.html b/changelog.html index 5161eb43..ad39cb40 100644 --- a/changelog.html +++ b/changelog.html @@ -1,15 +1,21 @@ -
-webkit-mask
property.hasSystemMsg
property as systemMsg
will always contain a string now.' + x + '
' }).join(', ') || 'no topics']
+ ];
+
+ if ( ! ffz_room ) {
+ output.push(['Current Room', 'none']);
+ return succeed(output);
+ }
+
+ output.push(['Current Room', room_id]);
+
+ if ( ! ffz_room.logviewer_levels ) {
+ output.push(['Logging Enabled', 'loading']);
+
+ utils.logviewer.get('channel/' + room_id, token)
+ .then(utils.json).then(function(result) {
+ f.log("[LV] Channel Info: " + room_id, result);
+ ffz_room.logviewer_levels = result;
+ });
+
+ return succeed(output);
+ }
+
+ var data = ffz_room.logviewer_levels;
+
+ if ( ! data.channel ) {
+ output.push(['Logging Enabled', false]);
+ return succeed(output);
+ }
+
+ output.push(['Logging Enabled', data.channel.active === 1]);
+ output.push(['User Level', data.me.valid ? data.me.level : 'invalid']);
+ output.push(['Level: View Logs', data.channel.viewlogs]);
+ output.push(['Level: View Moderation Logs', data.channel.viewmodlogs]);
+ output.push(['Level: View Comments', data.channel.viewcomments]);
+ output.push(['Level: Write Comments', data.channel.writecomments]);
+ output.push(['Level: Delete Comments', data.channel.deletecomments]);
+
+ succeed(output);
+
+ }).catch(function(err) {
+ succeed(['Authentication', 'unable to get token']);
+ });
+ });
+ }
+ },
+
+ twitch: {
+ order: 4,
+ title: "Twitch Configuration",
+ refresh: false,
+ type: "list",
+
+ render: function() {
+ var user = this.get_user(),
+ output = [ ['Deploy Flavor', SiteOptions.deploy_flavor] ];
+
+ if ( user && user.login ) {
+ output.push(['Current User', user.login + ' [' + user.id + ']']);
+ var us = [];
+
+ user.is_staff && us.push('staff');
+ user.is_admin && us.push('admin');
+ user.is_partner && us.push('partner');
+ user.is_broadcaster && us.push('broadcaster');
+ user.has_premium && us.push('premium');
+ user.has_turbo && us.push('turbo');
+ user.account_verified && us.push('verified');
+
+ output.push(['User State', us.join(', ') || 'none']);
+ } else
+ output.push(['Current User', 'not logged in']);
+
+ if ( window.Twitch && Twitch.geo && Twitch.geo._result ) {
+ var data = Twitch.geo._result;
+ if ( data.geo )
+ output.push(['Region', data.geo + (data.eu ? ' [EU]' : '')]);
+
+ if ( data.received_language )
+ output.push(['Received Language', data.received_language]);
+ }
+
+ return output;
+ }
+ },
+
+ experiments: {
+ order: 5,
+ title: "Twitch Experiments",
+ refresh: false,
+ type: "list",
+
+ render: function() {
+ var exp_service = utils.ember_lookup('service:experiments'),
+ output = [];
+
+ if ( exp_service ) {
+ for(var key in exp_service.values) {
+ if ( ! exp_service.values.hasOwnProperty(key) )
+ continue;
+
+ output.push([key, exp_service.values[key]]);
+ }
+ }
+
+ return output;
+ }
+ },
+
+ memory: {
+ order: 6,
+ title: "Memory Statistics",
+ refresh: true,
+ type: "list",
+
+ visible: function() { return window.performance && performance.memory },
+
+ render: function() {
+ var mem = performance.memory;
+ return [
+ ['jsHeapSizeLimit', utils.format_size(mem.jsHeapSizeLimit) + ' (' + mem.jsHeapSizeLimit + ')'],
+ ['totalJSHeapSize', utils.format_size(mem.totalJSHeapSize) + ' (' + mem.totalJSHeapSize + ')'],
+ ['usedJSHeapSize', utils.format_size(mem.usedJSHeapSize) + ' (' + mem.usedJSHeapSize + ')']
+ ]
+ }
+ },
+
+ player: {
+ order: 7,
+ title: "Player Statistics",
+ refresh: true,
+ type: "list",
+
+ get_player: function() {
+ for(var key in this.players)
+ if ( this.players[key] && ! this.players[key].isDestroyed && this.players[key].player )
+ return this.players[key].player;
+ },
+
+ visible: function() { return FFZ.debugging_blocks.player.get_player.call(this) },
+
+ render: function() {
+ var player = FFZ.debugging_blocks.player.get_player.call(this),
+ data;
+
+ try {
+ data = player.getVideoInfo();
+ } catch(err) {}
+
+ if ( ! data )
+ return [];
+
+ try {
+ data.backend = player.getBackend();
+ data.version = player.getVersion();
+ } catch(err) {}
+
+ var sorted_keys = Object.keys(data).sort(),
+ output = [];
+
+ for(var i=0; i < sorted_keys.length; i++)
+ output.push([sorted_keys[i], data[sorted_keys[i]]]);
+
+ return output;
+ }
+ },
+
+ logs: {
+ order: 100,
+ title: "Logs",
+ refresh: false,
+ type: "text",
+
+ render: function() {
+ return this._log_data.join("\n");
+ }
+ }
+}
+
+
var include_html = function(heading_text, filename, callback) {
return function(view, container) {
var heading = createElement('div', 'chat-menu-content center');
@@ -81,76 +335,6 @@ var include_html = function(heading_text, filename, callback) {
render_news = include_html("news", constants.SERVER + "script/news.html");
-var make_line = function(key, container) {
- var desc = NICE_DESCRIPTION.hasOwnProperty(key) ? NICE_DESCRIPTION[key] : key;
- if ( ! desc )
- return;
-
- line = createElement('li', null, desc + '');
- line.setAttribute('data-property', key);
- container.appendChild(line);
- return line;
-};
-
-var update_mem_stats = function(container) {
- if ( ! document.querySelector('.ffz-ui-sub-menu-page[data-page="debugging"]') )
- return;
-
- setTimeout(update_mem_stats.bind(this, container), 1000);
-
- var mem = window.performance && performance.memory;
- if ( ! mem )
- return;
-
- var sorted_keys = ['jsHeapSizeLimit', 'totalJSHeapSize', 'usedJSHeapSize'];
- for(var i=0; i < sorted_keys.length; i++) {
- var key = sorted_keys[i],
- data = mem[key],
- line = container.querySelector('li[data-property="' + key + '"]');
-
- if ( ! line )
- line = make_line(key, container);
-
- if ( line )
- line.querySelector('span').textContent = utils.format_size(data) + ' (' + data + ')';
- }
-};
-
-var update_player_stats = function(player, container) {
- if ( ! document.querySelector('.ffz-ui-sub-menu-page[data-page="debugging"]') || ! player.getVideoInfo )
- return;
-
- setTimeout(update_player_stats.bind(this, player, container), 1000);
-
- var player_data;
-
- try {
- player_data = player.getVideoInfo();
- } catch(err) { }
-
- if ( ! player_data )
- return;
-
- try {
- player_data.backend = player.getBackend();
- player_data.version = player.getVersion();
- } catch(err) { }
-
- var sorted_keys = Object.keys(player_data).sort();
- for(var i=0; i < sorted_keys.length; i++) {
- var key = sorted_keys[i],
- data = player_data[key],
- line = container.querySelector('li[data-property="' + key + '"]');
-
- if ( ! line )
- line = make_line(key, container);
-
- if ( line )
- line.querySelector('span').textContent = data;
- }
-};
-
-
FFZ.menu_pages.about = {
name: "About",
icon: constants.HEART,
@@ -303,187 +487,118 @@ FFZ.menu_pages.about = {
name: "Debug",
wide: true,
render: function(view, container) {
- // Heading
- var heading = createElement('div'),
+ var f = this;
- info_head = createElement('div'),
- info = createElement('ul'),
- info_list = [
- ['Client ID', localStorage.ffzClientId || 'not set'],
- ['Socket Server', this._ws_sock && this._ws_sock.url || 'disconnected' ],
- ['Server Ping', this._ws_last_ping || 'unknown'],
- ['Time Offset', this._ws_sock && this._ws_server_offset && (this._ws_server_offset < 0 ? "-" : "") + utils.time_to_string(Math.abs(this._ws_server_offset) / 1000) || 'unknown']
- ],
+ // Heading!
+ container.appendChild(createElement('div', 'chat-menu-content center',
+ '