View file public/assets/js/app.js

File size: 12.36Kb
$(function() {

    prettyPrint();

    bootbox.setDefaults({ locale: 'ru' });

    toastr.options = {
        "progressBar": true,
        "positionClass": "toast-top-full-width"
    };

    $('.markItUp').markItUp(mySettings);
    $('.markItUpHtml').markItUp(myHtmlSettings);

    $('[data-toggle="tooltip"]').tooltip();
    $('[data-toggle="popover"]').popover();

    // Скрывает поповеры по клику в любом месте
    $('body').on('click', function (e) {
        //did not click a popover toggle or popover
        if ($(e.target).data('toggle') !== 'popover'
            && $(e.target).parents('.popover.in').length === 0) {
            $('[data-toggle="popover"]').popover('hide');
        }
    });

    // Спойлер
    $('.spoiler-title').click(function() {
        var spoiler = $(this).parent();
        spoiler.toggleClass('spoiler-open');
        spoiler.find('.spoiler-text:first').slideToggle();
    });

    /* Показ новостей на главной */
    $(".news-title").click(function() {
        $(this).toggleClass('fa-caret-up');
        $(this).nextAll(".news-text:first").slideToggle();
    });

    $('video,audio').mediaelementplayer();

    $("a.gallery").colorbox({
        maxWidth: '100%',
        maxHeight: '100%',
        onComplete : function() {
            $(this).colorbox.resize();
        }
    }).colorbox({rel: function() {
            return $(this).data('group');
        },
        current: 'Фото {current} из {total}'
    });

    $(window).resize(function() {
        $.colorbox.resize();
    });

    $('.colorpick').colorpicker({
        useAlpha: false,
        format: 'hex'
    });

    $('.carousel').carousel({
        interval: false
    });

    $('.phone').mask('0 000 000-00-00');
});

/* Вывод уведомлений */
function notify(type, title, message, optionsOverride) {
    return toastr[type](message, title, optionsOverride);
}

/* Показ формы загрузки файла */
function showAttachForm() {
    $('.js-attach-button').hide();
    $('.js-attach-form').slideDown();

    return false;
}

/* Переход к форме ввода */
function postJump() {

    $('html, body').animate({
        scrollTop: ($('.form').offset().top)
    }, 500);
}

/* Ответ на сообщение */
function postReply(el)
{
    postJump();

    var field  = $('.markItUpEditor');
    var post   = $(el).closest('.post');
    var author = post.find('.author').data('login');

    separ = field.val().length ? '\n' : '';
    field.focus().val(field.val() + separ + '@' + author + ', ');

    return false;
}

/* Цитирование сообщения */
function postQuote(el)
{
    postJump();

    var field  = $('.markItUpEditor');
    var post   = $(el).closest('.post');
    var top    = post.find('.b');
    var author = post.find('.author').data('login');
    var date   = top.find('small').text();

    var text    = post.find('.message').clone();
    var message = text.find("blockquote").remove().end().text();

    separ = field.val().length ? '\n' : '';
    field.focus().val(field.val() + separ + '[quote=@' + author + ' ' + date + ']' + $.trim(message) + '[/quote]\n');

    return false;
}

/* Выход с сайта */
function logout(el)
{
    if (bootbox.confirm('Вы уверены, что хотите выйти?', function(result) {
            if (result) {
                window.location = $(el).attr("href");
            }
        }))

        return false;
}

/* Отправка жалобы на спам */
function sendComplaint(el)
{
    bootbox.confirm('Вы действительно хотите отправить жалобу?', function(result) {
        if (result) {

            $.ajax({
                data: {
                    id: $(el).data('id'),
                    type: $(el).data('type'),
                    page: $(el).data('page'),
                    token: $(el).data('token')
                },
                dataType: 'json', type: 'post', url: '/ajax/complaint',
                success: function(data) {

                    $(el).replaceWith('<i class="fa fa-bell-slash text-muted"></i>');

                    if (data.status === 'error') {
                        notify('error', data.message);
                        return false;
                    }

                    if (data.status === 'success') {
                        notify('success', 'Жалоба успешно отправлена!');
                    }
                }
            });
        }
    });

    return false;
}

/* Добавление или удаление закладок */
function bookmark(el)
{
    $.ajax({
        data: {tid: $(el).data('tid'), token: $(el).data('token')},
        dataType: 'json', type: 'post', url: '/forums/bookmarks/perform',
        success: function(data) {

            if (data.status === 'error') {
                notify('error', data.message);
                return false;
            }

            if (data.status === 'added') {
                notify('success', data.message);
                $(el).text('Из закладок');
            }

            if (data.status === 'deleted') {
                notify('success', data.message);
                $(el).text('В закладки');
            }
        }
    });

    return false;
}

/* Удаление сообщения в форуме */
function deletePost(el)
{
    $.ajax({
        data: {tid: $(el).data('tid'), token: $(el).data('token')},
        dataType: 'json', type: 'post', url: '/forums/active/delete',
        success: function(data) {

            if (data.status === 'error') {
                notify('error', data.message);
                return false;
            }

            if (data.status === 'success') {
                notify('success', 'Сообщение успешно удалено');

                $(el).closest('.post').hide('slow');
            }
        }
    });

    return false;
}

/* Удаление комментариев */
function deleteComment(el)
{
    bootbox.confirm('Вы действительно хотите удалить комментарий?', function(result) {
        if (result) {
            $.ajax({
                data: {
                    id: $(el).data('id'),
                    rid: $(el).data('rid'),
                    type: $(el).data('type'),
                    token: $(el).data('token')
                },
                dataType: 'json', type: 'post', url: '/ajax/delcomment',
                success: function(data) {

                    if (data.status === 'error') {
                        notify('error', data.message);
                        return false;
                    }

                    if (data.status === 'success') {
                        notify('success', 'Комментарий успешно удален!');

                        $(el).closest('.post').hide('slow');
                    }
                }
            });
        }
    });

    return false;
}

/* Изменение рейтинга */
function changeRating(el)
{
    $.ajax({
        data: {
            id: $(el).data('id'),
            type: $(el).data('type'),
            vote: $(el).data('vote'),
            token: $(el).data('token')
        },
        dataType: 'json',
        type: 'post',
        url: '/ajax/rating',
        success: function(data) {
            if (data.status === 'error') {
                return false;
            }

            if (data.status === 'success') {
                rating = $(el).closest('.js-rating').find('span');

                $(el).closest('.js-rating').find('a').removeClass('active');

                if (! data.cancel) {
                    $(el).addClass('active');
                }

                rating.html($(data.rating));
            }
        }
    });

    return false;
}

/**
 * Удаляет запись из истории рейтинга
 */
function deleteRating(el)
{
    $.ajax({
        data: {
            id: $(el).data('id'),
            token: $(el).data('token')
        },
        dataType: 'json', type: 'post', url: '/ratings/delete',
        success: function(data) {

            if (data.status === 'error') {
                notify('error', data.message);
                return false;
            }

            if (data.status === 'success') {
                notify('success', 'Запись успешно удалена');

                $(el).closest('.post').hide('slow');
            }
        }
    });

    return false;
}

/**
 * Удаляет запись из списка жалоб
 */
function deleteSpam(el)
{
    $.ajax({
        data: {id: $(el).data('id'), token: $(el).data('token')},
        dataType: 'json', type: 'post', url: '/admin/spam/delete',
        success: function(data) {

            if (data.status === 'error') {
                notify('error', data.message);
                return false;
            }

            if (data.status === 'success') {
                notify('success', 'Запись успешно удалена');

                $(el).closest('.post').hide('slow');
            }
        }
    });

    return false;
}

/**
 * Удаляет запись со стены сообщений
 */
function deleteWall(el)
{
    $.ajax({
        data: {id: $(el).data('id'), login: $(el).data('login'), token: $(el).data('token')},
        dataType: 'json', type: 'post', url: '/walls/' + $(el).data('login') + '/delete',
        success: function(data) {

            if (data.status === 'error') {
                notify('error', data.message);
                return false;
            }

            if (data.status === 'success') {
                notify('success', 'Запись успешно удалена');

                $(el).closest('.post').hide('slow');
            }
        }
    });

    return false;
}

/* Показ формы создания голосования */
function showVoteForm()
{
    $('.js-vote-form').toggle();

    return false;
}


function copyToClipboard(el)
{
    var form = $(el).closest('.input-group');
    form.find('input').select();
    document.execCommand("copy");

    return false;
}

/* Загрузка изображения */
function submitImage(el, paste)
{
    var form = new FormData();
    form.append('image', el.files[0]);
    form.append('id', $(el).data('id'));
    form.append('type', $(el).data('type'));
    form.append('token', $(el).data('token'));

    $.ajax({
        data: form,
        type: 'post',
        contentType: false,
        processData: false,
        dataType: 'json',
        url: '/ajax/image/upload',
        beforeSend: function() {
            $('.js-images').append('<i class="fas fa-spinner fa-spin fa-3x mx-3"></i>');
        },
        complete: function() {
            $('.fa-spinner').remove();
        },
        success: function(data) {

            if (data.status === 'error') {
                notify('error', data.message);
                return false;
            }

            if (data.status === 'success') {

                var template = $('.js-image-template').clone();

                template.find('img').attr({
                    'src'         : data.path,
                    'data-source' : data.source
                });

                template.find('a').attr('data-id', data.id);

                $('.js-images').append(template.html());

                if (paste) {
                    pasteImage(template.find('img'));
                }
            }
        }
    });

    return false;
}

/* Вставка изображения в поле */
function pasteImage(el)
{
    var field    = $('.markItUpEditor');
    var caretPos = field[0].selectionStart;
    var text     = field.val();
    var paste    = '[img]' + $(el).data('source') + '[/img]';
    field.focus().val(text.substring(0, caretPos) + paste + text.substring(caretPos));
}

/* Удаление изображения */
function deleteImage(el)
{
    $.ajax({
        data: {
            id: $(el).data('id'),
            type: $(el).data('type'),
            token: $(el).data('token')
        },
        dataType: 'json',
        type: 'post',
        url: '/ajax/image/delete',
        success: function(data) {

            if (data.status === 'error') {
                notify('error', data.message);
                return false;
            }

            if (data.status === 'success') {
                $(el).closest('.js-image').hide('fast');
            }
        }
    });

    return false;
}