Skip to content
Snippets Groups Projects
private_message_nodejs.thread.js 1.5 KiB
Newer Older
/**
 * @file
 * Client-side script to integrate private message threads with Nodejs.
 */

/*global Drupal, drupalSettings, io*/
/*jslint white:true, this, browser:true*/

(function (Drupal, drupalSettings, io) {

  "use strict";

  var initialized, threadSocket;

  function init() {

    // Only initialize once.
    if (!initialized) {
      initialized = true;

      threadSocket = io(drupalSettings.privateMessageNodejs.nodejsUrl + "/pm_thread");

      threadSocket.on('connect', function () {
         // Enter for the room for this thread.
         threadSocket.emit('thread', drupalSettings.privateMessageThread.threadId);
      });

      // Listen for an emission informing of a new private message in the
      // thread.
      threadSocket.on("new private message", function () {
        // Fetch new messages from the server.
        Drupal.PrivateMessages.getNewMessages();
      });

      // Set up a callback for when the user has changed threads.
      Drupal.PrivateMessages.threadChange.privateMessageNodejs = {
        threadLoaded: function (threadId) {
          // Join the room for the new thread.
          threadSocket.emit('thread', threadId);
        }
      };

      Drupal.AjaxCommands.prototype.privateMessageNodejsTriggerNewMessages = function () {
        threadSocket.emit("new private message", drupalSettings.privateMessageThread.threadId);
      };
    }
  }

  Drupal.behaviors.privateMessageNodejsThread = {
    attach: function () {
      init();
    }
  };

}(Drupal, drupalSettings, io));