Skip to content
Extraits de code Groupes Projets
web-socket-receiver.js 5,41 ko
Newer Older
  • Learn to ignore specific revisions
  • var WebSocketReceiver = {
      initialize: function(url) {
    
        var ws = new WebSocket(url);
    
        WSR.socket = ws;
    
    
        //Attach onmessage to websocket
        ws.onmessage = WSR.onMessage;
    
    lfortin's avatar
    lfortin a validé
        ws.onclose = function() {
          WSR.debug("socket closed");
        };
    
        ws.onopen = function() {
          ws.send(location.pathname);
          WSR.debug("connected...");
        };
      },
    
      onMessage: function(evt) {
          var obj = jQuery.parseJSON(evt.data);
    
    
          if(obj['class'].match(/^notifications/)) {
    
            WebSocketReceiver.processNotification(obj);
    
    lfortin's avatar
    lfortin a validé
          } else if (obj['class'] == 'people') {
    
            WSR.debug("got a " + obj['class']);
            WebSocketReceiver.processPerson(obj);
    
    
    lfortin's avatar
    lfortin a validé
          } else {
            WSR.debug("got a " + obj['class'] + " for aspects " + obj.aspect_ids);
    
    lfortin's avatar
    lfortin a validé
            if (obj['class']=="retractions") {
              WebSocketReceiver.processRetraction(obj.post_id);
    
    lfortin's avatar
    lfortin a validé
            } else if (obj['class']=="comments") {
              WebSocketReceiver.processComment(obj.post_id, obj.comment_id, obj.html, {
                'notification': obj.notification,
                'mine?': obj['mine?'],
                'my_post?': obj['my_post?']
              });
    
            } else if (obj['class']=="likes") {
              WebSocketReceiver.processLike(obj.post_id, obj.html)
    
    
    lfortin's avatar
    lfortin a validé
            } else {
              WebSocketReceiver.processPost(obj['class'], obj.post_id, obj.html, obj.aspect_ids);
    
    lfortin's avatar
    lfortin a validé
      processPerson: function(response) {
    
        var form = $('.webfinger_form');
    
    maxwell's avatar
    maxwell a validé
        form.siblings('#loader').hide();
    
        var result_ul = form.siblings('#request_result');
    
    lfortin's avatar
    lfortin a validé
        if(response.status == 'fail') {
    
    maxwell's avatar
    maxwell a validé
          result_ul.siblings('.error').show();
    
    lfortin's avatar
    lfortin a validé
          result_ul.find('.error').text(response.response).show();
        } else {
          $('#people_stream').prepend(response.html).slideDown('slow', function(){});
    
          var first_li = result_ul.find('li:first');
    
    maxwell's avatar
    maxwell a validé
          first_li.hide()
    
    lfortin's avatar
    lfortin a validé
          first_li.after(response.html);
    
          result_ul.find("[name='request[into]']").val(result_ul.attr('aspect_id'));
          result_ul.children(':nth-child(2)').slideDown('fast', function(){});
        }
      },
    
    
      processNotification: function(notification){
    
        var nBadge = $("#notification_badge div.badge_count");
    
    
        nBadge.html().replace(/\d+/, function(num){
          nBadge.html(parseInt(num)+1);
        });
    
        if(nBadge.hasClass("hidden")){
          nBadge.removeClass("hidden");
        }
    
        $('#notification').html(notification['html'])
          .fadeIn(200)
          .delay(8000)
          .fadeOut(200, function(){
            $(this).html("");
          });
    
      },
    
      processRetraction: function(post_id){
    
    lfortin's avatar
    lfortin a validé
        $("*[data-guid='" + post_id + "']").fadeOut(400, function() {
          $(this).remove();
        });
        if($("#main_stream")[0].childElementCount == 0) {
    
          $("#no_posts").fadeIn(200);
        }
      },
    
    
    lfortin's avatar
    lfortin a validé
      processComment: function(postId, commentId, html, opts) {
    
    lfortin's avatar
    lfortin a validé
        if( $(".comment[data-guid='"+commentId+"']").length == 0 ) {
    
    danielgrippi's avatar
    danielgrippi a validé
          var post = $("*[data-guid='"+postId+"']'"),
              prevComments = $('.comment.posted', post);
    
          if(prevComments.length > 0) {
            prevComments.last().after(
              $(html).fadeIn("fast", function(){})
            );
          } else {
            $('.comments li:last', post).before(
              $(html).fadeIn("fast", function(){})
            );
          }
    
    
          var toggler = $('.show_post_comments', post);
    
              toggler.html().replace(/\d+/,$('.comments', post).find('li').length -1)
    
    lfortin's avatar
    lfortin a validé
            if( !$(".comments", post).is(':visible') ) {
    
    
            if( $(".show_comments", post).hasClass('hidden') ){
              $(".show_comments", post).removeClass('hidden');
            }
    
    Dan Hansen's avatar
    Dan Hansen a validé
        Diaspora.widgets.timeago.updateTimeAgo();
    
        Diaspora.widgets.directionDetector.updateBinds();
    
      processLike: function(postId, html) {
        var post = $("*[data-guid='"+postId+"']");
        $(".likes_container", post).fadeOut('fast').html(html).fadeIn('fast');
      },
    
    
    lfortin's avatar
    lfortin a validé
      processPost: function(className, postId, html, aspectIds) {
        if(WebSocketReceiver.onPageForAspects(aspectIds)) {
    
          WebSocketReceiver.addPostToStream(postId, html);
    
    lfortin's avatar
    lfortin a validé
      addPostToStream: function(postId, html) {
    
        if( $(".stream_element[data-guid='" + postId + "']").length == 0 ) {
    
    lfortin's avatar
    lfortin a validé
          var showMessage = function() {
    
              streamElement.fadeIn("fast", function() {
                streamElement.find("label").inFieldLabels();
    
    lfortin's avatar
    lfortin a validé
          if( $("#no_posts").is(":visible") ) {
    
            $("#no_posts").fadeOut(400, showMessage()).hide();
          } else {
            showMessage();
          }
    
          Diaspora.widgets.timeago.updateTimeAgo();
    
          Diaspora.widgets.directionDetector.updateBinds();
    
    lfortin's avatar
    lfortin a validé
      onPageForClass: function(className) {
    
        return (location.href.indexOf(className) != -1 );
      },
    
    
    lfortin's avatar
    lfortin a validé
      onPageForAspects: function(aspectIds) {
    
        var streamIds = $('#main_stream').attr('data-guids'),
            found = false;
    
    
        $.each(aspectIds, function(index, value) {
    
          if(WebSocketReceiver.onStreamForAspect(value, streamIds)) {
    
    lfortin's avatar
    lfortin a validé
            found = true;
    
    lfortin's avatar
    lfortin a validé
          };
    
      onStreamForAspect: function(aspectId, streamIds) {
        return (streamIds.search(aspectId) != -1);
    
      },
    
      onPageOne: function() {
          var c = document.location.search.charAt(document.location.search.length-1);
          return ((c =='') || (c== '1'));
      },
    
    lfortin's avatar
    lfortin a validé
      debug: function(str) {
    
    lfortin's avatar
    lfortin a validé
    var WSR = WebSocketReceiver;