UNPKG

nodebb-plugin-buzzer

Version:

NodeBB plugin that will add the classic MSN buzzer to the chat!

101 lines (95 loc) 3.21 kB
define(['chat'], function(chat) { var html = { 'buzzbutton': '<button type="button" href="#" class="btn btn-success" id="chat-buzz-btn">Buzz</button>', 'audio': '<audio id="chats-buzz-audio" src="/plugins/nodebb-plugin-buzzer/sound/secret_buzz_sound.mp3" preload="auto"></audio>' } var module = {}, local = {}; module.base = { "init": function() { local.base.addListeners(); } } local.base = { "initBuzz": function(modal) { local.base.addHTML(modal, function(modal) { local.actions.buzz.register(modal); local.actions.onbuzz.register(modal); }); }, "addListeners": function() { local.actions.load.register(); }, "addHTML": function(modal, callback) { //Button $('body').append(html.audio); modal.find('.input-group-btn').append(html.buzzbutton); callback(modal); } } local.actions = { "load": { "register": function() { $('body').on('focus', '#chat-message-input', this.handle); }, "handle": function(e) { var modal = $(e.target).parents('.chat-modal'); var isEquipped = modal.data('buzz-equiped'); if (!isEquipped) { modal.data('buzz-equiped', true); local.base.initBuzz(modal); } } }, "buzz": { "register": function(modal) { modal.find('#chat-buzz-btn').off('click').on('click', function(e) { e.currentTarget.disabled = true; setTimeout(function() { e.currentTarget.disabled = false; }, 2000); //Rate limit it just a little bit var uid = local.utils.getUID(modal); local.actions.buzz.handle(modal, uid); }); }, "handle": function(modal, uid) { socket.emit('modules.chats.buzz', {'to': uid}); } }, "onbuzz": { "isBuzzing": false, "register": function(modal) { if (socket.listeners('event:chats.buzz').length === 0) { socket.on('event:chats.buzz', this.handle); } }, "handle": function(data) { var isBuzzing = local.actions.onbuzz.isBuzzing; //Kinda limit it, don't want them to completely lose it but still be annoyed! if (!isBuzzing) { var audio = document.getElementById('chats-buzz-audio'); audio.pause(); audio.currentTime = 0; var modal = chat.getModal(data.fromuid); if (modal.length > 0) { isBuzzing = true; modal.addClass('chat-buzz-animated chat-buzz-tada'); audio.play(); chat.appendChatMessage(modal, "You got buzzed!", Date.now()) setTimeout(function() { modal.removeClass('chat-buzz-animated chat-buzz-tada'); isBuzzing = false; }, 1000); } } } } } local.utils = { "getUID": function(modal) { return modal.get(0).id.match(/\d+/)[0]; } } return module; });