reprogl

Форк
0
/
comments.js 
108 строк · 3.8 Кб
1
function showErrors(errorsArray, defaultField) {
2
    errorsArray.forEach(function (err) {
3
        var id_field = err.path;
4
        if (id_field === 'unknown') {
5
            id_field = defaultField;
6
        }
7
        var input = $('#' + id_field);
8
        input.addClass('error');
9
        input.parent().append('<small class="error">' + err.message + '</small>');
10
    });
11
}
12

13
function clearErrors(fields) {
14
    fields.forEach(function (id) {
15
        var input = $('#' + id);
16
        if (input.hasClass('error')) {
17
            input.parent().find('small.error').remove();
18
            input.removeClass('error');
19
        }
20
    });
21
}
22

23
$(function () {
24
    var form = $('#comment_form');
25
    if (form.length) {
26
        var storageLocal = window.localStorage;
27
        var defaultField = 'comment_text';
28
        var allFields = ['name', 'email', 'website', 'comment_text'];
29

30
        initCommentator();
31

32
        var comment_url = form.attr('data-url');
33
        var comments_section = $('section.comments');
34

35
        comments_section.on('submit', '#comment_form', function() {
36
            var formData = $('#comment_form').serialize();
37
            $('.ajax-loader').css('display', 'flex');
38

39
            $.ajax({
40
                url: comment_url,
41
                data: formData,
42
                type: 'POST',
43
                success: function(data) {
44
                    saveCommentator();
45
                    clearErrors(allFields);
46
                    if (data.valid) {
47
                        $('#comments-wrapper').append($('#comment_add'));
48
                        $('#comment_text').val('');
49
                        $('#parentId').val(0);
50
                        $('#comments_thread').load(window.location.pathname + ' #comments_thread > *', function () {
51
                            $('.ajax-loader').hide();
52
                        });
53
                    } else {
54
                        showErrors(data.errors, defaultField);
55
                        $('.ajax-loader').hide();
56
                    }
57
                },
58
                error: function () {
59
                    clearErrors(allFields);
60
                    showErrors([{path: defaultField, message: 'Непонятная ошибка &#x1F914;'}], defaultField);
61
                    $('.ajax-loader').hide();
62
                }
63
            });
64

65
            return false;
66
        });
67

68
        comments_section.on('click', '.comment-reply span', function() {
69
            var parent_id = $(this).attr('data-comment-id');
70

71
            $('#form_bottom_' + parent_id).append($('#comment_add'));
72
            $('#parentId').val(parent_id);
73
        });
74

75
        comments_section.on('click', '#topic-reply span', function() {
76
            $('#comments-wrapper').append($('#comment_add'));
77
            $('#parentId').val(0);
78
        });
79

80
        function initCommentator() {
81
            if (storageLocal) {
82
                var nameField = $('#name');
83
                if (nameField.length) {
84
                    if (storageLocal.getItem('nickname')) {
85
                        nameField.val(storageLocal.getItem('nickname'));
86
                    }
87
                    if (storageLocal.getItem('email')) {
88
                        $('#email').val(storageLocal.getItem('email'));
89
                    }
90
                    if (storageLocal.getItem('website')) {
91
                        $('#website').val(storageLocal.getItem('website'));
92
                    }
93
                }
94
            }
95
        }
96

97
        function saveCommentator() {
98
            if (storageLocal) {
99
                var nameField = $('#name');
100
                if (nameField.length) {
101
                    storageLocal.setItem('nickname', nameField.val());
102
                    storageLocal.setItem('email', $('#email').val());
103
                    storageLocal.setItem('website', $('#website').val());
104
                }
105
            }
106
        }
107
    }
108
});
109

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.