e107inc/e107

View on GitHub
e107_plugins/forum/js/forum.js

Summary

Maintainability
A
0 mins
Test Coverage
/**
 * @file
 * Forum JavaScript behaviors integration.
 */

var e107 = e107 || {'settings': {}, 'behaviors': {}};

(function ($)
{

    /**
     * Behavior to bind click events on action buttons/links.
     *
     * @type {{attach: e107.behaviors.forumActions.attach}}
     * @see "e107_web/js/core/all.jquery.js" file for more information.
     */
    e107.behaviors.forumActions = {
        attach: function (context, settings)
        {
            $('a[data-forum-action], input[data-forum-action]', context).one('data-forum-action').each(function ()
            {
                $(this).on('click', function (e)
                {
                    e.preventDefault();

                    var $this = $(this);
                    var action = $this.attr('data-forum-action');
                    var thread = $this.attr('data-forum-thread');
                    var post = $this.attr('data-forum-post');
                    if (typeof tinymce == 'undefined')
                    {
                        var text = $('#forum-quickreply-text').val();
                    }
                    else
                    {
                        var text = tinymce.get('forum-quickreply-text').getContent();
                    }
                    var insert = $this.attr('data-forum-insert');
                    var token = $this.attr('data-token');
                    var script = $this.attr("src");

                    $.ajax({
                        type: "POST",
                        url: script,
                        data: {thread: thread, action: action, post: post, text: text, insert: insert, e_token: token},
                        success: function (data)
                        {
                            try
                            {
                                var d = $.parseJSON(data);
                            } catch(e)
                            {
                                // Not JSON.
                                return;
                            }

                            // Update e_token value on quick-reply form for the next Ajax request.
                            if(d.e_token)
                            {
                                $this.attr('data-token', d.e_token);
                            }

                            // Show pup-up message.
                            if(d.msg)
                            {
                                var alertType = 'info';

                                if(d.status == 'ok')
                                {
                                    alertType = 'success';
                                }

                                if(d.status == 'error')
                                {
                                    alertType = 'danger';
                                }

                                if(jQuery().notify)
                                {
                                    $('#uiAlert').notify({
                                        type: alertType,
                                        message: {text: d.msg},
                                        fadeOut: {enabled: true, delay: 3000}
                                    }).show();
                                }
                                else
                                {
                                    alert(d.msg);
                                    location.reload();
                                    return;
                                }
                            }

                            if(action == 'stick' || action == 'unstick' || action == 'lock' || action == 'unlock')
                            {
                                location.reload();
                                return;
                            }

                            if(action == 'track')
                            {
                                if(d.html != false)
                                {
                                    $('#' + insert).html(d.html);
                                    // Attach all registered behaviors to the new content.
                                    e107.attachBehaviors();
                                }
                            }

                            if(action == 'quickreply' && d.status == 'ok')
                            {
                                if(d.html != false)
                                {
                                    $(d.html).appendTo('#forum-viewtopic').hide().slideDown(1000);
                                    // Attach all registered behaviors to the new content.
                                    e107.attachBehaviors();
                                }

                                if (typeof tinymce == 'undefined')
                                {
                                    $('#forum-quickreply-text').val('');
                                }
                                else
                                {
                                    tinymce.get('forum-quickreply-text').setContent('');
                                }
                                return;
                            }

                            if(d.hide)
                            {
                                var t = '#thread-' + thread;
                                var p = '#post-' + post;

                                $(t).hide('slow');
                                $(p).hide('slow').slideUp(800);
                            }
                        }
                    });
                });
            });
        }
    };

})(jQuery);