jQuery Comments v1.0.1

jQuery Plugn Macros

Configuration

Name Type Description
pageUrl String The url of the resource to add comments to. Must end with a slash
streamSelector String

The selector of stream wrapper which wraps all comments

renderCommentFn Function The callback function to render the markup for a comment. Takes the following arguments user, comment, commentDate, where user is an object containing name, href, photoHref
clearContainerFn Function The callback function to clear the comments container. Takes no arguments
ajaxLoadingFn Function The callback function to show ajax loading. Takes one argument isLoading (true/false)
commentsPerPage Number The number of comments will be showed per page
paginateFn Function The callback function to render the markeup for pagination
passwordProperty String Property name to use in sending password to server
aggregated Boolean  If true will list all comments under the given page 

 

Default Configuration

{
    pageUrl: window.location,
    streamSelector: ".comments-stream",
    renderCommentFn: function(user, date, comment, commentId) {
        log("renderCommentFn-101-standard", user, "container=", container, "commentId=", commentId);
        if (user === null) {
            log("no user so dont render");
            return;
        }
        var outerDiv = $("#" + commentId);
        log("outerDiv", commentId, outerDiv);
        if (outerDiv.length === 0) {
            log("add comment");
            outerDiv = $("<div class='forumReply'></div>");
            outerDiv.attr("id", commentId);
            var commentStream = container.find(config.streamSelector);
            flog("append to", commentStream, "sel", config.streamSelector);
            commentStream.append(outerDiv);
            var profilePic = profileImg(user);
            var profLink = $("<a class='profilePic' href='" + user.href + "'>" + profilePic + "</a>");
            var nameLink = $("<a class='user' href='" + user.href + "'>" + user.name + "</a>");
            var commentPara = $("<p class='cmt'></p>");
            commentPara.html(comment);

            var dateSpan = $("<abbr title='" + date.toISOString() + "' class='auxText'>" + toDisplayDateNoTime(date) + "</abbr>");
            var toolsDiv = $("<div></div>");
            outerDiv.append(profLink);
            outerDiv.append(nameLink);
            outerDiv.append(commentPara);
            outerDiv.append(dateSpan);
            outerDiv.append(toolsDiv);
        } else {
            log("update");
            // Just update
            outerDiv.find(".cmt").html(comment);
        }

        jQuery("abbr.auxText", outerDiv).timeago();
    },
    clearContainerFn: function() {
        container.find(config.streamSelector).html("");
    },
    ajaxLoadingFn: function(isLoading) {
        if (isLoading) {
            ajaxLoadingOn();
        } else {
            ajaxLoadingOff();
        }
    },
    commentsPerPage: 10,
    paginateFn: function(comments, config, container) {
        log("paginateFn-101-standard", comments, config, container);

        var totalComments = comments.length;
        var commentsPerPage = config.commentsPerPage;

        if (totalComments > commentsPerPage) {
            container.prepend(
                '<div class="well well-sm text-center"><a href="" class="btn-show-more">Show previous comments</a></div>'
            );

            var commentWrappers = container.find('.forumReply');

            // Show 10 last comments
            commentWrappers.filter(':lt(' + (totalComments - commentsPerPage) + ')').hide().addClass('hidden-comment');

            container.find('.btn-show-more').click(function(e) {
                e.preventDefault();

                var hiddenCommentWrappers = commentWrappers.filter('.hidden-comment');
                var totalHiddenComments = hiddenCommentWrappers.length;

                hiddenCommentWrappers.filter(':gt(' + (totalHiddenComments - commentsPerPage - 1) + ')').show().removeClass('hidden-comment');

                if (totalHiddenComments <= commentsPerPage) {
                    $(this).parent().hide();
                }
            });
        }
    },
    aggregated: false
}