diff --git a/src/ember/line.js b/src/ember/line.js index c2dbef39..c8ca23ef 100644 --- a/src/ember/line.js +++ b/src/ember/line.js @@ -608,14 +608,14 @@ FFZ.prototype.setup_line = function() { this.log("Hooking the Ember Message Line component."); - var MLine = utils.ember_resolve('component:message-line'); + var MLine = utils.ember_resolve('component:chat/message-line'); if ( MLine ) this._modify_chat_subline(MLine); else this.error("Couldn't find the Message Line component."); this.log("Hooking the Ember Whisper Line component."); - var WLine = utils.ember_resolve('component:whisper-line'); + var WLine = utils.ember_resolve('component:chat/whisper-line'); if ( WLine ) this._modify_chat_subline(WLine); else diff --git a/src/ember/moderation-card.js b/src/ember/moderation-card.js index 21ac9a5f..e6b42c56 100644 --- a/src/ember/moderation-card.js +++ b/src/ember/moderation-card.js @@ -9,6 +9,7 @@ var FFZ = window.FrankerFaceZ, keycodes = { ESC: 27, + R: 82, P: 80, B: 66, T: 84, @@ -355,7 +356,7 @@ FFZ.settings_info.mod_buttons = { f.settings.set('mod_buttons', final); // Update existing chat lines. - var CL = utils.ember_resolve('component:chat-line'), + var CL = utils.ember_resolve('component:chat/chat-line'), views = CL ? utils.ember_views() : []; for(var vid in views) { @@ -498,14 +499,14 @@ FFZ.prototype.setup_mod_card = function() { return orig_stop(e, element, combo); } - Mousetrap.bind("up up down down left right left right b a enter", function() { + Mousetrap.bind("up up down down left right left right b a", function() { var el = document.querySelector(".app-main") || document.querySelector(".ember-chat-container"); el && el.classList.toggle('ffz-flip'); }); this.log("Hooking the Ember Moderation Card view."); - var Card = utils.ember_resolve('component:moderation-card'), + var Card = utils.ember_resolve('component:chat/moderation-card'), f = this; Card.reopen({ @@ -595,6 +596,21 @@ FFZ.prototype.setup_mod_card = function() { this.ffz_room_id = room_id; + + // Action Override + if ( this._actions ) { + this._actions.banUser = function(e) { + var room = utils.ember_lookup('controller:chat').get('currentRoom'); + room.send("/ban " + e + ban_reason(), true); + } + + this._actions.timeoutUser = function(e) { + var room = utils.ember_lookup('controller:chat').get('currentRoom'); + room.send("/timeout " + e + " 600" + ban_reason(), true); + } + } + + // Alias Display if ( alias ) { var name = el.querySelector('h3.name'), @@ -717,6 +733,19 @@ FFZ.prototype.setup_mod_card = function() { else if ( is_mod && key == keycodes.U ) room.send("/unban " + user_id, true); + else if ( is_mod && ban_reasons && key == keycodes.R ) { + var event = document.createEvent('MouseEvents'); + event.initMouseEvent('mousedown', true, true, window); + ban_reasons.focus(); + ban_reasons.dispatchEvent(event); + return; + } + + else if ( key == keycodes.ESC && e.target === ban_reasons ) { + el.focus(); + return; + } + else if ( key != keycodes.ESC ) return; @@ -780,7 +809,7 @@ FFZ.prototype.setup_mod_card = function() { if ( f.settings.mod_card_reasons && f.settings.mod_card_reasons.length ) { // Moderation Reasons line = utils.createElement('div', 'extra-interface interface clearfix'); - ban_reasons = utils.createElement('select', 'ffz-ban-reasons', ''); + ban_reasons = utils.createElement('select', 'ffz-ban-reasons', ''); line.appendChild(ban_reasons); for(var i=0; i < f.settings.mod_card_reasons.length; i++) { diff --git a/src/main.js b/src/main.js index 00dc18dd..ee43ce30 100644 --- a/src/main.js +++ b/src/main.js @@ -37,7 +37,7 @@ FFZ.msg_commands = {}; // Version var VER = FFZ.version_info = { - major: 3, minor: 5, revision: 183, + major: 3, minor: 5, revision: 185, toString: function() { return [VER.major, VER.minor, VER.revision].join(".") + (VER.extra || ""); } @@ -129,6 +129,28 @@ FFZ.prototype.get_user = function(force_reload) { } +FFZ.prototype.get_user_editor_of = function() { + var f = this; + return new Promise(function(succeed,fail) { + var user = f.get_user(); + if ( ! user || ! user.login ) + return fail('not logged in'); + + jQuery.get("/" + user.login + "/dashboard/permissions").done(function(data) { + var el = document.createElement('div'); + el.innerHTML = data; + + var links = _.pluck(el.querySelectorAll('#editable .label'), 'href'); + succeed(_.map(links, function(e) { return e.substr(e.lastIndexOf('/') + 1) })); + + }).fail(function(e) { + f.error("Failed to load User Editor State", e); + fail('failed to load dashboard'); + }); + }); +} + + // ------------------- // Import Everything! // -------------------