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!
// -------------------