User:Tappity/chat.js

var PINGS = ['tappity', 'tap', 'slayze', 'taptap'];

var discordBot = 'SAODiscordBridge'; var missedMsgCount = 0; var oldWindowTitle = document.title; var isInit = false; var isActive = true;

var getFirstWord = function(text) { return text.substr(0, text.indexOf(' ')); };

var scrollToBottom = function { mainRoom.viewDiscussion.scrollToBottom; };

var shouldIgnore = function(name) { return name == wgUserName || document.hasFocus; };

var updateWindowTitle = function { var addOn = missedMsgCount ? '[' + missedMsgCount + '] ' : ''; document.title = addOn + oldWindowTitle; };

var parseMessage = function(attr) { var name = attr.name ? attr.name : getFirstWord(attr.text); var msg = attr.text;

var isDiscord = name == discordBot;

if (isDiscord) { var split = msg.indexOf(':'); name = msg.substr(0, split); msg = msg.substr(split + 2); // ": " }

if (shouldIgnore(name)) return null; else return { name: name + (isDiscord ? ' [Discord]' : ''), msg: msg }; };

var buildInMessage = function(name) { return { title: '[IN] ' + name }; };

var buildOutMessage = function(name) { return { title: '[OUT] ' + name }; };

var buildChatMessage = function(name, msg) { var isMentioned = PINGS.some(function(p) {   return msg.toLowerCase.indexOf(p) !== -1;  }); if (isMentioned) { name = '[MENTION] ' + name; scrollToBottom; }

missedMsgCount += 1; updateWindowTitle;

return { title: name, body: msg }; };

var getMessage = function(attr) { var msg = parseMessage(attr); if (!msg) return;

if (attr.name) return buildChatMessage(msg.name, msg.msg); else if (attr.text.endsWith('is now trapped with us!')) return buildInMessage(msg.name); else return buildOutMessage(msg.name); };

var alertPing = function(chat) { //console.log('start - alertPing');

var msg = getMessage(chat.attributes);

if (msg && isActive) var blackhole = 'body' in msg ? new Notification(msg.title, { body: msg.body }) : new Notification(msg.title);

//console.log('end - alertPing'); };

var initNotifications = function { var e = document.createElement('div'); e.style.position = 'fixed'; e.style.right = '165px'; e.style.top = '15px'; document.body.appendChild(e);

var updateNotificationStatus = function { e.textContent = '[' + (isActive ? 'On' : 'Off') + ']'; }; updateNotificationStatus;

var toggle = function { isActive = !isActive; updateNotificationStatus; }; e.addEventListener('click', toggle); };

$(document).ready(function { PINGS = PINGS.map(function(t) { return t.toLowerCase; });

var init = function { if (isInit) { console.log('binded - alertPing'); Notification.requestPermission; initNotifications; return; }

isInit = !!(mainRoom.model.chats.bind('afteradd', $.proxy(alertPing, mainRoom.viewDiscussion)));

// keep trying setTimeout(init, 5000); };

// skip first few messages if any setTimeout(init, 2000); });

$(window).on('focus', function { missedMsgCount = 0;  updateWindowTitle; });