smartinmedia/cunity

View on GitHub
lib/modules/Messages/styles/javascript/conversation.js

Summary

Maintainability
C
7 hrs
Test Coverage
var scrollApi, countOffset, smileys;
scrollApi = null;
countOffset = 0;
smileys = {};
$(document).ready(function () {
    if (window.innerWidth > 1023) {
        var scroll = $("#conversation-content").jScrollPane({
            stickToBottom: true
        });
        scrollApi = scroll.data('jsp');
    }

    $("input.cusers").each(function () {
        selectedReceiver[$(this).val()] = 1;
    });


    $(document).on("mouseenter", "#conversation-content .conversation-item-me .conversation-item-content-wrap", function () {
        $(this).find("button.close").show();
    }).on("mouseleave", "#conversation-content .conversation-item-me .conversation-item-content-wrap", function () {
        $(this).find("button.close").hide();
    }).on("click", ".conversation-message-delete", function () {
        var id = $(this).data("msgid"), msg = $(this).data("msg");
        bootbox.confirm(msg, function (result) {
            if (result) {
                sendRequest({msgid: id}, "messages", "deletemessage", function (res) {
                    $("#conversation-message-" + id).remove();
                    if (scrollApi !== null)
                        scrollApi.reinitialise();
                });
            }
        });
    }).on("click", ".leaveConversation", function (e) {
        e.preventDefault();
        bootbox.dialog({
            message: $(this).data("confirmation"),
            title: "Leave Conversation",
            closeButton: true,
            buttons: {
                danger: {
                    label: "Keep Messages",
                    className: "btn-warning",
                    callback: function () {
                        leaveConversation(false);
                    }
                },
                success: {
                    label: "Delete messages",
                    className: "btn-success",
                    callback: function () {
                        leaveConversation(true);
                    }
                }
            }
        });
    }).on("keyup", ".conversation-writingbox div.message:visible", function () {

        $("#temp").html($(this).html()).find("img").each(function () {
            $(this).replaceWith("[:" + $(this).data("key") + ":]");
        });
        $("#hiddenmessagebox").val($("#temp").text());

        if ($(this).html() !== "")
            $(".conversation-writingbox input[type='submit']").prop('disabled', false);
        else
            $(".conversation-writingbox input[type='submit']").prop('disabled', true);
    }).on("click", ".emoticon-select-conversation", function () {
        var key = $(this).data("key");
        $(".conversation-writingbox div.message:visible").html(function (i, val) {
            return val + smileys[key];
        }).trigger("keyup").focus();
        $('.conversation-add-emoticon').popover('hide');
    });

    $(".conversation-add-emoticon").popover({
        html: true,
        container: 'body',
        content: function () {
            return $("#conversation-emoticon-list > div").html();
        }
    });

    $.getJSON(siteurl + "style/" + design + "/img/emoticons/emoticons.json", function (data) {
        for (x in data) {
            $("#conversation-emoticon-list > div").append('<img src="' + siteurl + 'style/' + design + '/img/emoticons/' + data[x] + '.png" data-key="' + data[x] + '" class="emoticon-select-conversation">');
            smileys[data[x]] = '<img src="' + siteurl + 'style/' + design + '/img/emoticons/' + data[x] + '.png" class="message-smiley" data-key="' + data[x] + '">';
        }
        loadMoreMessages(false);
    });

    window.setInterval(function () {
        if (!$("body").hasClass("blurred"))
            loadMoreMessages(true);
    }, 10000);
});

function loadMoreMessages(refresh) {
    $("#conversation-more").hide();
    if (refresh) {
        refreshId = $("#conversation-content .list > div:last").data("id");
        $("#refreshConversationButton > i.fa").addClass("fa-spin");
    } else
        refreshId = 0;
    sendRequest({
        conversation_id: $("#conversation_id").val(),
        offset: countOffset,
        refresh: refreshId
    }, "messages", "loadConversationMessages", function (res) {
        $("#conversation-loader").hide();
        for (x in res.messages) {
            var m = res.messages[x];
            m.pimg = checkImage(m.pimg, "user", "cr_");
            for (x in smileys)
                m.message = replaceAll('[:' + x + ':]', smileys[x], m.message);
            if (refresh)
                $("#conversation-content .list").append(tmpl("conversation-item", m));
            else
                $("#conversation-content .list").prepend(tmpl("conversation-item", m));
        }
        if (!refresh) {
            if (countOffset + 20 < $("#conversation-message-count").val())
                $("#conversation-more").show();
            countOffset += res.messages.length;
        } else
            $("#refreshConversationButton > i.fa").removeClass("fa-spin");

        if (scrollApi !== null)
            scrollApi.reinitialise();
        if ((countOffset === res.messages.length || refresh) && res.messages.length > 0) {
            if (scrollApi !== null)
                scrollApi.scrollToBottom();
            $(".mobile-page-wrapper").scrollTop(640);
        }
    });
}

function sendmessage(res) {
    $(".conversation-writingbox div.message,#temp").empty();
    for (x in smileys)
        res.data.message = res.data.message.replace('[:' + x + ':]', smileys[x]);
    $("#conversation-content .list").append(tmpl("conversation-item", res.data));
    if (scrollApi !== null) {
        scrollApi.reinitialise();
        scrollApi.scrollToBottom();
    }
    if (window.innerWidth < 768)
        $(".mobile-page-wrapper").scrollTop(640);
}

function leaveConversation(delMsgs) {
    sendRequest({
        conversation_id: $("#conversation_id").val(),
        delMsgs: delMsgs
    }, "messages", "leaveConversation", function (res) {
        location.href = convertUrl({module: "messages"});
    });
}