var CommentsHelper = (function() { 'use strict'; /** * Initializes the comments * */ function initializeComments(){ var comments; if ( $('.step-comment') && $('.step-comment').length > 0 ) { comments = $('.step-comment'); } else if ( $('.result-comment') && $('.result-comment').length > 0 ) { comments = $('.result-comment'); } if(!_.isUndefined(comments)) { $.each(comments, function(){ var that = $(this); var link = that.attr('data-href'); $.ajax({ method: 'GET', url: link, beforeSend: animateSpinner(that, true) }) .done(function(data) { that.html(data.html); initCommentForm(that); initCommentsLink(that); scrollBottom(that.find('.content-comments')); }) .always(function() { animateSpinner(that, false); }); }); } } // scroll to the botttom function scrollBottom(id) { var list; if ( id.hasClass('content-comments') ) { list = id; } else { list = id.find('.content-comments'); } if ( list && list.length > 0) { list.scrollTop($(list)[0].scrollHeight); } } // Initialize show more comments link. function initCommentsLink($el) { $el.find('.btn-more-comments') .on('ajax:success', function (e, data) { if (data.html) { var list = $(this).parents('ul'); var moreBtn = list.find('.btn-more-comments'); var listItem = moreBtn.parents('li'); $(data.html).insertAfter(listItem); if (data.results_number < data.per_page) { moreBtn.remove(); } else { moreBtn.attr('href', data.more_url); moreBtn.trigger('blur'); } // Reposition dropdown comment options scrollCommentOptions(listItem .closest('.content-comments') .find('.dropdown-comment')); } }); } // Initialize comment form. function initCommentForm($el) { var $form = $el.find('ul form'); $('.help-block', $form).addClass('hide'); $form.on('ajax:send', function () { $('#comment_message', $form).attr('readonly', true); }) .on('ajax:success', function (e, data) { if (data.html) { var list = $form.parents('ul'); // Remove potential 'no comments' element list.parent().find('.content-comments') .find('li.no-comments').remove(); list.parent().find('.content-comments') .append('
  • ' + data.html + '
  • ') .scrollTop(0); list.parents('ul').find('> li.comment:gt(8)').remove(); $('#comment_message', $form).val(''); $('.form-group', $form) .removeClass('has-error'); $('.help-block', $form) .html('') .addClass('hide'); scrollBottom($el); } }) .on('ajax:error', function (ev, xhr) { if (xhr.status === 400) { var messageError = xhr.responseJSON.errors.message; if (messageError) { $('.form-group', $form) .addClass('has-error'); $('.help-block', $form) .html(messageError[0]) .removeClass('hide'); } } }) .on('ajax:complete', function () { scrollBottom($('#comment_message', $form)); $('#comment_message', $form) .attr('readonly', false) .focus(); }); } // restore comments after update or when new element is created function bindCommentInitializerToNewElement() { $(document) .ready(function() { if( document.getElementById('steps') !== null ) { $('#steps') .change(function() { $('.step-save') .on('click', function() { $(document) .on('ajax:success', function(){ initializeComments(); }); }); }); } else if ( document.getElementById('results') !== null ) { $('#results') .change(function() { $('.save-result') .on('click', function() { $(document) .on('ajax:success', function(){ initializeComments(); }); }); }); } }); } // bindCommentInitializerToNewElement(); // initializeComments(); return { initialize: initializeComments, scrollBottom: scrollBottom, moreComments: initCommentsLink, form: initCommentForm, bindNewElement: bindCommentInitializerToNewElement }; })();