Вход Регистрация
Файл: concrete5.7.5.6/concrete/js/build/core/conversations/conversations.js
Строк: 1600
<?php
/**
 * $.fn.concreteConversation
 * Functions for conversation handling
 *
 * Events:
 *    beforeInitializeConversation         : Before Conversation Initialized
 *    initializeConversation               : Conversation Initialized
 *    conversationLoaded                   : Conversation Loaded
 *    conversationPostError                : Error posting message
 *    conversationBeforeDeleteMessage      : Before deleting message
 *    conversationDeleteMessage            : Deleting message
 *    conversationDeleteMessageError       : Error deleting message
 *    conversationBeforeAddMessageFromJSON : Before adding message from json
 *    conversationAddMessageFromJSON       : After adding message from json
 *    conversationBeforeUpdateCount        : Before updating message count
 *    conversationUpdateCount              : After updating message count
 *    conversationBeforeSubmitForm         : Before submitting form
 *    conversationSubmitForm               : After submitting form
 */

/* jshint unused:vars, undef:true, browser:true, jquery:true, -W041 */
/* global CCM_TOOLS_PATH, ConcreteEvent */

(function($,window){
  
"use strict";
  $.
extend($.fn,{
    
concreteConversation:function(options) {
      return 
this.each(function() {
        var 
$obj = $(this);
        var 
data $obj.data('concreteConversation');
        if (!
data) {
          
$obj.data('concreteConversation', (data = new ConcreteConversation($objoptions)));
        }
      });
    }
  });

  var 
i18n = {
    
Confirm_remove_message'Remove this message? Replies to it will not be removed.',
    
Confirm_mark_as_spam'Are you sure you want to flag this message as spam?',
    
Warn_currently_editing'Please complete or cancel the current message editing session before editing this message.',
    
Unspecified_error_occurred'An unspecified error occurred.',
    
Error_deleting_message'Something went wrong while deleting this message, please refresh and try again.',
    
Error_flagging_message'Something went wrong while flagging this message, please refresh and try again.'
    
// Please add new translatable strings to the getConversationsJavascript of /concrete/controllers/frontend/assets_localization.php
  
};
  $.
fn.concreteConversation.localize = function(dictionary) {
    $.
extend(truei18ndictionary);
  };

  var 
ConcreteConversation = function(elementoptions) {
    
this.publish("beforeInitializeConversation",{element:element,options:options});
    
this.init(element,options);
    
this.publish("initializeConversation",{element:element,options:options});
  };
  
ConcreteConversation.fn ConcreteConversation.prototype = {
    
publish: function(t,f) {
      
|| {};
      
f.ConcreteConversation this;
      
window.ConcreteEvent.publish(t,f);
    },
    
init: function(element,options) {
      var 
obj this;

      
obj.$element element;
      
obj.options = $.extend({
        
method:        'ajax',
        
paginate:      false,
        
displayMode:   'threaded',
        
itemsPerPage:  -1,
        
activeUsers:   [],
        
uninitializedtrue
      
}, options);

      var 
enablePosting      = (obj.options.posttoken != '') ? 0;
      var 
paginate           = (obj.options.paginate) ? 0;
      var 
orderBy            = (obj.options.orderBy);
      var 
enableOrdering     = (obj.options.enableOrdering);
      var 
displayPostingForm = (obj.options.displayPostingForm);
      var 
enableCommentRating = (obj.options.enableCommentRating);
      var 
commentRatingUserID = (obj.options.commentRatingUserID);
      var 
commentRatingIP = (obj.options.commentRatingIP);
      var 
addMessageLabel = (obj.options.addMessageLabel) ? obj.options.addMessageLabel '';
      var 
dateFormat = (obj.options.dateFormat);
      var 
customDateFormat = (obj.options.customDateFormat);
      var 
blockAreaHandle = (obj.options.blockAreaHandle);
      var 
maxFiles = (obj.options.maxFiles); // unused
      
var maxFileSize = (obj.options.maxFileSize); // unused
      
var fileExtensions = (obj.options.fileExtensions); // unused
      
var attachmentsEnabled = (obj.options.attachmentsEnabled);
      var 
attachmentOverridesEnabled = (obj.options.attachmentOverridesEnabled);

      if (
obj.options.method == 'ajax') {
        $.
post(CCM_TOOLS_PATH '/conversations/view_ajax', {
          
'cnvID':               obj.options.cnvID,
          
'cID':                 obj.options.cID,
          
'blockID':             obj.options.blockID,
          
'enablePosting':       enablePosting,
          
'itemsPerPage':        obj.options.itemsPerPage,
          
'addMessageLabel':     addMessageLabel,
          
'paginate':            paginate,
          
'displayMode':         obj.options.displayMode,
          
'orderBy':             orderBy,
          
'enableOrdering':      enableOrdering,
          
'displayPostingForm':  displayPostingForm,
          
'enableCommentRating'enableCommentRating,
          
'commentRatingUserID'commentRatingUserID,
          
'commentRatingIP':     commentRatingIP,
          
'dateFormat':          dateFormat,
          
'customDateFormat':    customDateFormat,
          
'blockAreaHandle' :    blockAreaHandle,
          
'attachmentsEnabled':  attachmentsEnabled,
          
'attachmentOverridesEnabled' attachmentOverridesEnabled

        
}, function(r) {
          var 
oldobj window.obj;
          
window.obj obj;
          
obj.$element.empty().append(r);
          var 
hash window.location.hash.match(/^#cnv([0-9]+)Message[0-9]+$/);
          
if (hash !== null && hash[1] == obj.options.cnvID) {
            var 
target = $('a' window.location.hash).offset();
            $(
'html, body').animate({scrollToptarget.top}, 800'linear');
          }
          
window.obj oldobj;
          
obj.attachBindings();
          
obj.publish('conversationLoaded');
        });
      } else {
        
obj.attachBindings();
        
obj.finishSetup();
        
obj.publish('conversationLoaded');
      }
    },
    
mentionList: function(itemscoordinatesbindTo) {
      var 
obj this;
      if (!
coordinates) return;
      
obj.dropdown.parent.css({top:coordinates.y,left:coordinates.x});
      if (
items.length == 0) {
        
obj.dropdown.handle.dropdown('toggle');
        
obj.dropdown.parent.remove();
        
obj.dropdown.active false;
        
obj.dropdown.activeItem = -1;
        return;
      }

      
obj.dropdown.list.empty();
      
items.slice(0,20).map(function(item){
        var 
listitem = $('<li/>');
        var 
anchor = $('<a/>').appendTo(listitem).text(item.getName());
        
anchor.click(function(){ConcreteEvent.fire('ConversationMentionSelect',{obj:obj,item:item},bindTo);});
        
listitem.appendTo(obj.dropdown.list);
      });
      if (!
obj.dropdown.active) {
        
obj.dropdown.active true;
        
obj.dropdown.activeItem = -1;
        
obj.dropdown.parent.appendTo(obj.$element);
        
obj.dropdown.handle.dropdown('toggle');
      }
      if (
obj.dropdown.activeItem >= 0)
        
obj.dropdown.list.children().eq(obj.dropdown.activeItem).addClass('active');
    },
    
attachSubscriptionBindings: function() {
      $(
'a[data-conversation-subscribe]').magnificPopup({
        
type'ajax',
        
callbacks: {
          
updateStatus: function(data) {
            if (
data.status == 'ready') {
              var 
$form = $('form[data-conversation-form=subscribe]');
              $(
'button').on('click'$form, function(e) {
                
e.preventDefault();
                
e.stopPropagation();
                $.
ajax({
                  
url$form.attr('action'),
                  
dataType'json',
                  
success: function(r) {
                    if (
r.subscribed) {
                      $(
'[data-conversation-subscribe=subscribe]').hide();
                      $(
'[data-conversation-subscribe=unsubscribe]').show();
                    } else {
                      $(
'[data-conversation-subscribe=unsubscribe]').hide();
                      $(
'[data-conversation-subscribe=subscribe]').show();
                    }
                    $.
magnificPopup.close();
                  }
                });
              });
            }
          },

          
beforeOpen: function () {
            
// just a hack that adds mfp-anim class to markup
            
this.st.mainClass 'mfp-zoom-in';
          }
        },
        
closeOnContentClicktrue,
        
midClicktrue // allow opening popup on middle mouse click. Always set it to true if you don't provide alternative source.
      
});
    },

    
attachBindings: function() {
      var 
obj this;
      
obj.$element.unbind('.cnv');
      if (
obj.options.uninitialized) {
        
obj.options.uninitialized false;
        
ConcreteEvent.bind('ConversationMention',function(edata){
            
obj.mentionList(data.itemsdata.coordinates || falsedata.bindTo || obj.$element.get(0));
          },
          
obj.$element.get(0// Bind to this conversation only.
        
);
        
obj.dropdown = {};
        
obj.dropdown.parent = $('<div/>').css({
          
position:'absolute',
          
height:0,
          
width:0
        
});
        
obj.dropdown.active false;
        
obj.dropdown.handle = $('<a/>').appendTo(obj.dropdown.parent);
        
obj.dropdown.list = $('<ul/>').addClass('dropdown-menu').appendTo(obj.dropdown.parent);
        
obj.dropdown.handle.dropdown();
        
ConcreteEvent.bind('ConversationTextareaKeydownUp',function(e){
          if (
obj.dropdown.activeItem == -1obj.dropdown.activeItem obj.dropdown.list.children().length;
          
obj.dropdown.activeItem -= 1;
          
obj.dropdown.activeItem += obj.dropdown.list.children().length;
          
obj.dropdown.activeItem %= obj.dropdown.list.children().length;
          
obj.dropdown.list.children().filter('.active').removeClass('active').end().eq(obj.dropdown.activeItem).addClass('active');
        }, 
obj.$element.get(0));
        
ConcreteEvent.bind('ConversationTextareaKeydownDown',function(e){
          
obj.dropdown.activeItem += 1;
          
obj.dropdown.activeItem += obj.dropdown.list.children().length;
          
obj.dropdown.activeItem %= obj.dropdown.list.children().length;
          
obj.dropdown.list.children().filter('.active').removeClass('active').end().eq(obj.dropdown.activeItem).addClass('active');
        }, 
obj.$element.get(0));
        
ConcreteEvent.bind('ConversationTextareaKeydownEnter',function(e){
          
obj.dropdown.list.children().filter('.active').children('a').click();
        }, 
obj.$element.get(0));
        
ConcreteEvent.bind('ConversationPostError',function(edata){
          var 
$form data.form,
            
messages data.messages;
          var 
'';
          $.
each(messages, function(im) {
            
+= '<br>';
          });
          
$form.find('div.ccm-conversation-errors').html(s).show();
        });
        
ConcreteEvent.bind('ConversationSubmitForm',function(edata){
          
data.form.find('div.ccm-conversation-errors').hide();
        });
      }
      var 
paginate = (obj.options.paginate) ? 0;
      var 
enablePosting = (obj.options.posttoken != '') ? 0;
      var 
addMessageLabel = (obj.options.addMessageLabel) ? obj.options.addMessageLabel '';

      
obj.$replyholder obj.$element.find('div.ccm-conversation-add-reply');
      
obj.$newmessageform obj.$element.find('div.ccm-conversation-add-new-message form');
      
obj.$deleteholder obj.$element.find('div.ccm-conversation-delete-message');
      
obj.$attachmentdeleteholder obj.$element.find('div.ccm-conversation-delete-attachment');
      
obj.$permalinkholder obj.$element.find('div.ccm-conversation-message-permalink');
      
obj.$messagelist obj.$element.find('div.ccm-conversation-message-list');
      
obj.$messagecnt obj.$element.find('.ccm-conversation-message-count');
      
obj.$postbuttons obj.$element.find('[data-submit=conversation-message]');
      
obj.$sortselect obj.$element.find('select[data-sort=conversation-message-list]');
      
obj.$loadmore obj.$element.find('[data-load-page=conversation-message-list]');
      
obj.$messages obj.$element.find('div.ccm-conversation-messages');
      
obj.$messagerating obj.$element.find('span.ccm-conversation-message-rating');

      
obj.$element.on('click.cnv''[data-submit=conversation-message]', function(e) {
        
e.preventDefault();
        
obj.submitForm($(this));
      });
      
obj.$element.on('click.cnv''[data-submit=update-conversation-message]', function() {
        
obj.submitUpdateForm($(this));
        return 
false;
      });
      
this.attachSubscriptionBindings();
      var 
replyIterator 1;
      
obj.$element.on('click.cnv''a[data-toggle=conversation-reply]', function(event) {
        
event.preventDefault();
        $(
'.ccm-conversation-attachment-container').each(function() {
          if($(
this).is(':visible')) {
            $(
this).toggle();
          }
        });
        var 
$replyform obj.$replyholder.appendTo($(this).closest('div[data-conversation-message-id]'));
        
$replyform.attr('data-form''conversation-reply').show();
        
$replyform.find('[data-submit=conversation-message]').attr('data-post-parent-id', $(this).attr('data-post-parent-id'));

        
$replyform.attr('rel''new-reply' replyIterator);
        
replyIterator++;  // this may not be necessary, but might come in handy if we need to know how many times a new reply box has been triggered.
        
return false;
      });

      $(
'.ccm-conversation-attachment-container').hide();
      $(
'.ccm-conversation-add-new-message .ccm-conversation-attachment-toggle').off('click.cnv').on('click.cnv', function(event){
        
event.preventDefault();
        if($(
'.ccm-conversation-add-reply .ccm-conversation-attachment-container').is(':visible')) {
          $(
'.ccm-conversation-add-reply .ccm-conversation-attachment-container').toggle();
        }
        $(
'.ccm-conversation-add-new-message .ccm-conversation-attachment-container').toggle();
      });
      $(
'.ccm-conversation-add-reply .ccm-conversation-attachment-toggle').off('click.cnv').on('click.cnv', function(event){
        
event.preventDefault();
        if($(
'.ccm-conversation-add-new-message .ccm-conversation-attachment-container').is(':visible')) {
          $(
'.ccm-conversation-add-new-message .ccm-conversation-attachment-container').toggle();
        }
        $(
'.ccm-conversation-add-reply .ccm-conversation-attachment-container').toggle();
      });

      
obj.$element.on('click.cnv''a[data-submit=delete-conversation-message]', function() {
        var 
$link = $(this);
        
obj.$deletedialog obj.$deleteholder.clone();
        if (
obj.$deletedialog.dialog) {
          
obj.$deletedialog.dialog({
            
modaltrue,
            
dialogClass'ccm-conversation-dialog',
            
titleobj.$deleteholder.attr('data-dialog-title'),
            
buttons: [
              {
                
'text'obj.$deleteholder.attr('data-cancel-button-title'),
                
'class''btn pull-left',
                
'click': function() {
                  
obj.$deletedialog.dialog('close');
                }
              },
              {
                
'text'obj.$deleteholder.attr('data-confirm-button-title'),
                
'class''btn pull-right btn-danger',
                
'click': function() {
                  
obj.deleteMessage($link.attr('data-conversation-message-id'));
                }
              }
            ]
          });
        } else {
          if (
window.confirm(i18n.Confirm_remove_message)) {
            
obj.deleteMessage($link.attr('data-conversation-message-id'));
          }
        }
        return 
false;
      });
      
obj.$element.on('click.cnv''a[data-submit=flag-conversation-message]', function() {
        var 
$link = $(this);
        if (
window.confirm(i18n.Confirm_mark_as_spam)) {
          
obj.flagMessage($link.attr('data-conversation-message-id'));
        }
        return 
false;
      });
      
obj.$element.on('click.cnv''a[data-load=edit-conversation-message]', function() {
        if($(
'.ccm-conversation-edit-message').is(':visible')) {
          
window.alert(i18n.Warn_currently_editing);
          return 
false;
        }
        var 
$link = $(this);
        
obj.editMessage($link.attr('data-conversation-message-id'));
      });
      
obj.$element.on('change.cnv''select[data-sort=conversation-message-list]', function() {
        
obj.$messagelist.load(CCM_TOOLS_PATH '/conversations/view_ajax', {
          
'cnvID':               obj.options.cnvID,
          
'task':                'get_messages',
          
'cID':                 obj.options.cID,
          
'blockID':             obj.options.blockID,
          
'enablePosting':       enablePosting,
          
'displayMode':         obj.options.displayMode,
          
'itemsPerPage':        obj.options.itemsPerPage,
          
'paginate':            paginate,
          
'addMessageLabel':     addMessageLabel,
          
'orderBy':             $(this).val(),
          
'enableOrdering':      obj.options.enableOrdering,
          
'displayPostingForm':  obj.options.displayPostingForm,
          
'enableCommentRating'obj.options.enableCommentRating,
          
'dateFormat':          obj.options.dateFormat,
          
'customDateFormat':    obj.options.customDateFormat,
          
'blockAreaHandle':     obj.options.blockAreaHandle,
          
'attachmentsEnabled':  obj.options.attachmentsEnabled,
          
'attachmentOverridesEnabled'obj.options.attachmentOverridesEnabled

        
}, function(r) {
          
obj.$replyholder.appendTo(obj.$element);
          $(
'.ccm-conversation-messages .dropdown-toggle').dropdown();
          
obj.attachBindings();
        });
      });

      
obj.$element.on('click.cnv''.image-popover-hover', function() {
        $.
magnificPopup.open({
          
items: {
            
src: $(this).attr('data-full-image'), // can be a HTML string, jQuery object, or CSS selector
            
type'image',
            
verticalFittrue
          
}
        });
      });



      
obj.$element.on('click.cnv''[data-load-page=conversation-message-list]', function() {
        var 
nextPage parseInt(obj.$loadmore.attr('data-next-page'));
        var 
totalPages parseInt(obj.$loadmore.attr('data-total-pages'));
        var 
data = {
          
'cnvID':               obj.options.cnvID,
          
'cID':                 obj.options.cID,
          
'blockID':             obj.options.blockID,
          
'itemsPerPage':        obj.options.itemsPerPage,
          
'displayMode':         obj.options.displayMode,
          
'blockAreaHandle':     obj.options.blockAreaHandle,
          
'enablePosting':       enablePosting,
          
'addMessageLabel':     addMessageLabel,
          
'page':                nextPage,
          
'orderBy':             obj.$sortselect.val(),
          
'enableCommentRating'obj.options.enableCommentRating,
          
'dateFormat':          obj.options.dateFormat,
          
'customDateFormat':    obj.options.customDateFormat,
          
'attachmentsEnabled':  obj.options.attachmentsEnabled,
          
'attachmentOverridesEnabled'obj.options.attachmentOverridesEnabled
        
};

        $.
ajax({
          
type'post',
          
datadata,
          
urlCCM_TOOLS_PATH '/conversations/message_page',
          
success: function(html) {
            
obj.$messages.append(html);
            $(
'.ccm-conversation-messages .dropdown-toggle').dropdown();
            if ((
nextPage 1) > totalPages) {
              
obj.$loadmore.hide();
            } else {
              
obj.$loadmore.attr('data-next-page'nextPage 1);
            }
          }
        });
      });

      
obj.$element.on('click.cnv''.conversation-rate-message', function() {
        var 
cnvMessageID = $(this).closest('[data-conversation-message-id]').attr('data-conversation-message-id');
        var 
cnvRatingTypeHandle = $(this).attr('data-conversation-rating-type');
        
obj.$messagerating.load(CCM_TOOLS_PATH '/conversations/rate');
        var 
data = {
          
'cnvID':               obj.options.cnvID,
          
'cID':                 obj.options.cID,
          
'blockID':             obj.options.blockID,
          
'cnvMessageID':        cnvMessageID,
          
'cnvRatingTypeHandle'cnvRatingTypeHandle,
          
'commentRatingUserID'obj.options.commentRatingUserID,
          
'commentRatingIP':     obj.options.commentRatingIP
        
};
        $.
ajax({
          
type'post',
          
datadata,
          
urlCCM_TOOLS_PATH '/conversations/rate',
          
success: function(html) {
            $(
'span[data-message-rating="' cnvMessageID '"]').load(CCM_TOOLS_PATH '/conversations/get_rating', {
              
'cnvMessageID':        cnvMessageID
            
});
          }
        });
      });
      
obj.$element.on('click.cnv''a.share-popup', function() {
        var 
dualScreenLeft window.screenLeft != undefined window.screenLeft screen.left;
        var 
dualScreenTop window.screenTop != undefined window.screenTop screen.top;
        var 
width window.innerWidth window.innerWidth document.documentElement.clientWidth document.documentElement.clientWidth screen.width;
        var 
height window.innerHeight window.innerHeight document.documentElement.clientHeight document.documentElement.clientHeight screen.height;
        var 
left = ((width 2) - (300)) + dualScreenLeft;
        var 
top = ((height 2) - (125)) + dualScreenTop;
        
window.open($(this).attr('href'), 'cnvSocialShare','left:' left ',top:' top ',height=250,width=600,toolbar=no,status=no');

        return 
false;
      });
      
obj.$element.on('click.cnv''a.share-permalink', function() {
        var 
$link = $(this);
        var 
permalink $link.attr('rel');
        
obj.$permalinkdialog obj.$permalinkholder.clone();
        var 
$textarea = $('<textarea readonly>').text(decodeURIComponent(permalink));
        
obj.$permalinkdialog.append($textarea);
        
$textarea.click(function() {
          var 
$this = $(this);
          
$this.select();
          
window.setTimeout(function() {
            
$this.select();
          }, 
1);
          
$this.mouseup(function() {
            
$this.unbind("mouseup");
            return 
false;
          });
        });
        if (
obj.$permalinkdialog.dialog) {
          
obj.$permalinkdialog.dialog({
            
modaltrue,
            
dialogClass'ccm-conversation-dialog',
            
titleobj.$permalinkholder.attr('data-dialog-title'),
            
buttons: [
              {
                
'text'obj.$permalinkholder.attr('data-cancel-button-title'),
                
'class''btn pull-left',
                
'click': function() {
                  
obj.$permalinkdialog.dialog('close');
                }
              }
            ]
          });
        }
        return 
false;
      });
      if(
obj.options.attachmentsEnabled 0) {
        
obj.$element.concreteConversationAttachments(obj);
      }
      $(
'.dropdown-toggle').dropdown();
    },
    
handlePostError: function($formmessages) {
      if (!
messages) {
        
messages = [i18n.Unspecified_error_occurred];
      }
      
this.publish('conversationPostError',{form:$form,messages:messages});
    },
    
deleteMessage: function(msgID) {

      var 
obj this;
      
obj.publish('conversationBeforeDeleteMessage',{msgID:msgID});
      var 
formArray = [{
        
'name''cnvMessageID',
        
'value'msgID
      
}];

      $.
ajax({
        
type'post',
        
dataformArray,
        
urlCCM_TOOLS_PATH '/conversations/delete_message',
        
success: function(html) {
          var 
$parent = $('div[data-conversation-message-id=' msgID ']');

          if (
$parent.length) {
            
$parent.after(html).remove();
          }
          
obj.updateCount();
          if (
obj.$deletedialog.dialog)
            
obj.$deletedialog.dialog('close');
          
obj.publish('conversationDeleteMessage',{msgID:msgID});
        },
        
error: function(e) {
          
obj.publish('conversationDeleteMessageError',{msgID:msgID,error:arguments});
          
window.alert(i18n.Error_deleting_message);
        }
      });
    },
    
editMessage: function(msgID) {
      var 
obj this;
      var 
formArray = [
        {
          
'name''cnvMessageID',
          
'value'msgID
        
},
        {
          
'name''cID',
          
'value'this.options.cID
        
},
        {
          
'name''blockAreaHandle',
          
'value'this.options.blockAreaHandle
        
},
        {
          
'name''bID',
          
'value'this.options.blockID
        
}
      ];
      $.
ajax({
        
type'post',
        
dataformArray,
        
urlCCM_TOOLS_PATH '/conversations/edit_message',
        
success: function(html) {
          var 
$parent = $('div[data-conversation-message-id=' msgID ']');
          var 
$previousContents $parent;
          
$parent.after(html).remove();
          $(
'.ccm-conversation-attachment-container').hide();
          $(
'.ccm-conversation-edit-message .ccm-conversation-attachment-toggle').off('click.cnv').on('click.cnv', function(event){
            
event.preventDefault();
            $(
'.ccm-conversation-edit-message .ccm-conversation-attachment-container').toggle();
          });
          
obj.$editMessageHolder obj.$element.find('div.ccm-conversation-edit-message');
          
obj.$element.concreteConversationAttachments(obj);
          $(
'button.cancel-update').on('click.cnv', function(){
            $(
'.ccm-conversation-edit-message').replaceWith($previousContents);
          });

        },
        
error: function(e) {
          
obj.publish('conversationEditMessageError',{msgID:msgID,error:arguments});
        }
      });
    },
    
flagMessage: function(msgID) {

      var 
obj this;
      
obj.publish('conversationBeforeFlagMessage',{msgID:msgID});
      var 
formArray = [{
        
'name''cnvMessageID',
        
'value'msgID
      
}];

      $.
ajax({
        
type'post',
        
dataformArray,
        
urlCCM_TOOLS_PATH '/conversations/flag_message',
        
success: function(html) {
          var 
$parent = $('div[data-conversation-message-id=' msgID ']');

          if (
$parent.length) {
            
$parent.after(html).remove();
          }
          
obj.updateCount();
          
obj.publish('conversationFlagMessage',{msgID:msgID});
        },
        
error: function(e) {
          
obj.publish('conversationFlagMessageError',{msgID:msgID,error:arguments});
          
window.alert(i18n.Error_flagging_message);
        }
      });
    },
    
addMessageFromJSON: function($formjson) {
      var 
obj this;
      
obj.publish('conversationBeforeAddMessageFromJSON',{json:json,form:$form});
      var 
enablePosting = (obj.options.posttoken != '') ? 0;
      var 
formArray = [{
        
'name''cnvMessageID',
        
'value'json.cnvMessageID
      
}, {
        
'name''enablePosting',
        
'value'enablePosting
      
}, {
        
'name''displayMode',
        
'value'obj.options.displayMode
      
}, {
        
'name''enableCommentRating',
        
'value'obj.options.enableCommentRating
      
}];

      $.
ajax({
        
type'post',
        
dataformArray,
        
urlCCM_TOOLS_PATH '/conversations/message_detail',
        
success: function(html) {
          var 
$parent = $('div[data-conversation-message-id=' json.cnvMessageParentID ']');

          if (
$parent.length) {
            
$parent.after(html);
            
obj.$replyholder.appendTo(obj.$element);
            
obj.$replyholder.hide();
            
obj.$replyholder.find(".conversation-editor").val('');
            try {
              
obj.$replyholder.find(".redactor_conversation_editor_" obj.options.cnvID).redactor('set''');
            } catch(
e) {}
          } else {
            if (
obj.options.orderBy == 'date_desc') {
              
obj.$messages.prepend(html);
            } else {
              
obj.$messages.append(html);
            }
            
obj.$element.find('.ccm-conversation-no-messages').hide();
            
obj.$newmessageform.find(".conversation-editor").val('');
            try {
              
obj.$newmessageform.find(".redactor_conversation_editor_" obj.options.cnvID).redactor('set''');
            } catch(
e) {}

          }
          
obj.publish('conversationAddMessageFromJSON',{json:json,form:$form});
          
obj.updateCount();
          var 
target = $('a#cnv' obj.options.cnvID 'Message' json.cnvMessageID).offset();
          $(
'.dropdown-toggle').dropdown();
          $(
'html, body').animate({scrollToptarget.top}, 800'linear');
        }
      });
    },
    
updateMessageFromJSON: function($formjson) {
      var 
obj this;
      var 
enablePosting = (obj.options.posttoken != '') ? 0;
      var 
formArray = [{
        
'name''cnvMessageID',
        
'value'json.cnvMessageID
      
}, {
        
'name''enablePosting',
        
'value'enablePosting
      
}, {
        
'name''displayMode',
        
'value'obj.options.displayMode
      
}, {
        
'name''enableCommentRating',
        
'value'obj.options.enableCommentRating
      
}];

      $.
ajax({
        
type'post',
        
dataformArray,
        
urlCCM_TOOLS_PATH '/conversations/message_detail',
        
success: function(html) {
          var 
$parent = $('div[data-conversation-message-id=' json.cnvMessageID ']');
          
$parent.after(html).remove();
          $(
'.dropdown-toggle').dropdown();
        }
      });
    },
    
updateCount: function() {
      var 
obj this;
      
obj.publish('conversationBeforeUpdateCount');
      
obj.$messagecnt.load(CCM_TOOLS_PATH '/conversations/count_header', {
        
'cnvID'obj.options.cnvID
      
},function(){
        
obj.publish('conversationUpdateCount');
      });
    },
    
submitForm: function($btn) {
      var 
obj this;
      
obj.publish('conversationBeforeSubmitForm');
      var 
$form $btn.closest('form');

      
$btn.prop('disabled'true);
      
$form.parent().addClass('ccm-conversation-form-submitted');
      var 
formArray $form.serializeArray();
      var 
parentID $btn.attr('data-post-parent-id');

      
formArray.push({
        
'name''token',
        
'value'obj.options.posttoken
      
}, {
        
'name''cnvID',
        
'value'obj.options.cnvID
      
}, {
        
'name''cnvMessageParentID',
        
'value'parentID
      
},{
        
'name''enableRating',
        
'value'parentID
      
});
      $.
ajax({
        
dataType'json',
        
type'post',
        
dataformArray,
        
urlCCM_TOOLS_PATH '/conversations/add_message',
        
success: function(r) {
          if (!
r) {
            
obj.handlePostError($form);
            return 
false;
          }
          if (
r.error) {
            
obj.handlePostError($formr.errors);
            return 
false;
          }
          $(
'.preview.processing').each(function(){
            $(
'input[rel="'+ $(this).attr('rel') +'"]').remove();
          });
          $(
'form.dropzone').each(function(){
            var 
= $(this).data('dropzone');
            $.
each(d.files,function(k,v){
              
d.removeFile(v);
            });
          });
          
obj.addMessageFromJSON($formr);
          
obj.publish('conversationSubmitForm',{form:$form,response:r});
        },
        
error: function(r) {
          
obj.handlePostError($form);
          return 
false;
        },
        
complete: function(r) {
          
$btn.prop('disabled'false);
          
$form.parent().closest('.ccm-conversation-form-submitted').removeClass('ccm-conversation-form-submitted');
        }
      });
    },
    
submitUpdateForm: function($btn) {
      var 
obj this;
      
obj.publish('conversationBeforeSubmitForm');
      var 
$form $btn.closest('form');

      
$btn.prop('disabled'true);
      
$form.parent().addClass('ccm-conversation-form-submitted');
      var 
formArray $form.serializeArray();
      var 
cnvMessageID $btn.attr('data-post-message-id');

      
formArray.push({
        
'name''token',
        
'value'obj.options.posttoken
      
}, {
        
'name''cnvMessageID',
        
'value'cnvMessageID
      
});
      $.
ajax({
        
dataType'json',
        
type'post',
        
dataformArray,
        
urlCCM_TOOLS_PATH '/conversations/update_message',
        
success: function(r) {
          if (!
r) {
            
obj.handlePostError($form);
            return 
false;
          }
          if (
r.error) {
            
obj.handlePostError($formr.errors);
            return 
false;
          }
          $(
'.preview.processing').each(function(){
            $(
'input[rel="'+ $(this).attr('rel') +'"]').remove();
          });
          
/*
           $('form.dropzone').each(function(){
           var d = $(this).data('dropzone');
           $.each(d.files,function(k,v){
           d.removeFile(v);
           });
           });
           */
          
obj.updateMessageFromJSON($formr);
          
obj.publish('conversationSubmitForm',{form:$form,response:r});
        },
        
error: function(r) {
          
obj.handlePostError($form);
          return 
false;
        },
        
complete: function(r) {
          
$btn.prop('disabled'false);
          
$form.parent().closest('.ccm-conversation-form-submitted').removeClass('ccm-conversation-form-submitted');
        }
      });
    },
    
tool:{
      
setCaretPosition:function(elemcaretPos) {
        
// http://stackoverflow.com/a/512542/950669
        
if(elem != null) {
          if(
elem.createTextRange) {
            var 
range elem.createTextRange();
            
range.move('character'caretPos);
            
range.select();
          }
          else {
            if(
elem.selectionStart) {
              
elem.focus();
              
elem.setSelectionRange(caretPoscaretPos);
            }
            else
              
elem.focus();
          }
        }
      },
      
getCaretPosition: function(elem) {
        
// http://stackoverflow.com/a/263796/950669
        
if (elem.selectionStart) {
          return 
elem.selectionStart;
        } else if (
document.selection) {
          
elem.focus();

          var 
document.selection.createRange();
          if (
== null) {
            return 
0;
          }

          var 
re elem.createTextRange(),
            
rc re.duplicate();
          
re.moveToBookmark(r.getBookmark());
          
rc.setEndPoint('EndToStart're);

          return 
rc.text.length;
        }
        return 
0;
      },
      
testMentionString: function(s) {
        return /^@[
a-z0-9]+$/.test(s);
      },
      
getMentionMatches: function(s,u) {
        return 
u.filter(function(d){return(d.indexOf(s)>=0);});
      },
      
isSameConversation: function(o,n) {
        return (
o.options.blockID === n.options.blockID && o.options.cnvID === n.options.cnvID);
      },

      
// MentionUser class, use this to pass around data with your @mention names.
      
MentionUser: function(name) {
        
this.getName = function() { return name; };
      }
    }
  };
})(
jQuery,window);
?>
Онлайн: 1
Реклама