PageSourceSearch

https://qums.ac.ir/UILibrary/Plugin/DourtalComment/js/DourtalComment.js

js qums.ac.ir collected 2026-10-02 10:09:46 UTC 71,817 bytes, 1,767 lines download raw bytes

1
2
3if (typeof Object.create !== 'function') {
4    Object.create = function (obj) {
5        function F() { };
6        F.prototype = obj;
7        return new F();
8    };
9}
10
11(function ($, window, document, undefined) {
12
13
14    var Comment = {
15        init_: function (options, elem) {
16            var self = this;
17            self.elem = elem;
18            self.$elem = $(elem);
19
20            self.options = $.extend({}, $.fn.comment.options, options);
21
22            var obj = JSON.parse(self.options.settings)
23
24            if (obj.SortOrder == 1) {
25                obj.SortOrder = 'desc'
26            } else if (obj.SortOrder == 2) {
27                obj.SortOrder = 'asc'
28            }
29
30            self.fetch_(obj.CommentCountVisibleInFirstLevel, obj.SortOrder, self.options.pageIndex);
31
32        },
33
34        buildForm_: function (comment_id, parent_id) {
35            var self = this;
36
37            var form_box = $('<div />');
38            form_box.addClass('form');
39
40            var send_comment_txt = $('<p />');
41            send_comment_txt.addClass('comment-text');
42            send_comment_txt.text(DourtalCommentResource.form.SendForm);
43
44            var form_elem = $('<form></form>');
45            form_elem.addClass('display-form');
46
47            form_box.append(send_comment_txt);
48            form_box.append(form_elem);
49
50            var display_inputs = $('<div />');
51            display_inputs.addClass('display-inputs');
52
53            //var secure_code = $('<div />');
54            //secure_code.addClass('secure-code');
55
56            var wrap_submit_div = $('<div />');
57
58            form_elem.append(display_inputs);
59            //form_elem.append(secure_code);
60            form_elem.append(wrap_submit_div);
61
62
63            //////// FORM BODY /////////
64
65            var textarea_input = $('<div />');
66            textarea_input.addClass('input-textarea');
67
68
69            if (self.options.isAthenticated == false) {
70                var name_email_input = $('<div />');
71                name_email_input.addClass('name-email');
72
73                display_inputs.append(name_email_input);
74
75                var name_input = $('<div />');
76                name_input.addClass('input-name');
77
78                var email_input = $('<div />');
79                email_input.addClass('input-email');
80
81                name_email_input.append(name_input);
82                name_email_input.append(email_input);
83
84                var user_icon = $('<i />');
85                user_icon.addClass('far fa-user icon');
86                user_icon.attr('aria-hidden', true);
87
88                var first_name = $('<input />');
89                first_name.addClass("input first-name");
90                first_name.attr('type', 'text');
91                first_name.attr('placeholder', DourtalCommentResource.form.FirstLastName);
92
93                var first_name_error = $('<span />');
94                first_name_error.addClass('email_validation');
95                first_name_error.text(DourtalCommentResource.form.FirstLastNameError);
96                first_name_error.hide();
97
98                name_input.append(user_icon);
99                name_input.append(first_name);
100                name_input.append(first_name_error);
101
102                var email_icon = $('<i />');
103                email_icon.addClass('far fa-envelope icon');
104                email_icon.attr('aria-hidden', true);
105
106                var email = $('<input />');
107                email.addClass('input email-field');
108                email.attr('placeholder', DourtalCommentResource.form.Email);
109                email.attr('type', 'email');
110
111                var email_error = $('<span />');
112                email_error.addClass('email_validation');
113                email_error.text(DourtalCommentResource.form.EmailError);
114                email_error.hide();
115
116                email_input.append(email_icon);
117                email_input.append(email);
118                email_input.append(email_error);
119            }
120
121            display_inputs.append(textarea_input);
122
123            
124
125            var comment_icon = $('<i />');
126            comment_icon.addClass('far fa-comment-alt icon');
127
128            var textarea = $('<textarea />');
129            textarea.addClass('input comment-textarea');
130            textarea.attr('placeholder', DourtalCommentResource.form.PutComment);
131
132            var textArea_error = $('<span />');
133            textArea_error.addClass('drt_textareaError');
134            textArea_error.text(DourtalCommentResource.form.PutCommentError);
135            textArea_error.hide();
136
137            textarea_input.append(comment_icon);
138            textarea_input.append(textarea);
139            textarea_input.append(textArea_error);
140
141            //var secure_field = $('<input />');
142            //secure_field.addClass("input secure-field");
143            //secure_field.attr('id', 'text');
144            //secure_field.attr('name', 'text');
145            //secure_field.attr('type', 'text');
146            //secure_field.attr('placeholder', DourtalCommentResource.form.EnterSecureCode);
147
148            //var secure_random_num = $('<div />');
149            //secure_random_num.addClass('secure-random-num');
150
151            //secure_code.append(secure_field);
152            //secure_code.append(secure_random_num);
153
154            //var wrap_div = $('<div />');
155
156            //var secure_txt = $('<p />');
157            //secure_txt.text('ZFK5600I');
158
159            //secure_random_num.append(wrap_div);
160            //secure_random_num.append(secure_txt);
161
162            //var sound_code = $('<a />');
163            //sound_code.addClass('sound-code');
164            //sound_code.attr('href', '#');
165
166            //var refresh_code = $('<a />');
167            //refresh_code.addClass('refresh-code');
168            //refresh_code.attr('href', '#');
169
170            //wrap_div.append(sound_code);
171            //wrap_div.append(refresh_code);
172
173            //var sound_icon = $('<i />');
174            //sound_icon.addClass('fas fa-volume-up');
175
176            //sound_code.append(sound_icon);
177
178            //var refresh_icon = $('<i />');
179            //refresh_icon.addClass('fas fa-redo-alt');
180
181            //refresh_code.append(refresh_icon);
182
183            //////// FORM FOOTER /////////
184
185            var submit_button = $('<button />');
186            submit_button.addClass('submit-button');
187            submit_button.text(DourtalCommentResource.form.SubmitComment);
188            submit_button.attr('type', 'submit');
189
190            wrap_submit_div.append(submit_button);
191
192            //////// FORM SUBMIT /////////
193
194            var link = window.location.href;
195
196            if (!self.options.isAthenticated) {
197                submit_button.click(function (e) {
198                    e.preventDefault();
199
200                    if (textarea.val() == '' || textarea.val() == null) {
201                        textArea_error.show();
202                    } else {
203                        textArea_error.hide()
204                    }
205
206                    if (first_name.val() == '' || first_name.val() == null ) {
207                        first_name_error.show()
208                    } else {
209                        first_name_error.hide()
210                    }
211                    var email_value = email.val();
212                    if (email_value == '') {
213                        email_error.show();
214                    }
215                    if (IsEmail(email_value) == false) {
216                        email_error.show();
217                        return false;
218                    } else {
219                        email_error.hide();
220                    }
221                    function IsEmail(email) {
222                        var regex = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
223                        if (!regex.test(email)) {
224                            return false;
225                        } else {
226                            return true;
227                        }
228                    }
229
230                    var spinIcon = $('<i />');
231                    spinIcon.addClass('far fa-spinner fa-spin spinner');
232                    $('.submit-button').html(spinIcon);
233                    $('.submit-button').css('pointer-events', 'none');
234
235                    $.ajax({
236                        url: self.options.url_input,
237                        type: 'POST',
238                        header: { "Accept-Language": `${self.options.lang}`},
239                        contentType: 'application/json-patch+json',
240                        data: JSON.stringify({
241                            categoryId: self.options.categoryId,
242                            categoryParentId: self.options.categoryParentId,
243                            categoryType: self.options.categoryType,
244                            organizationId: self.options.organizationId,
245                            link: link,
246                            parentId: null,
247                            content: textarea.val(),
248                            summaryOfPost: self.options.summeryOfPost,
249                            name: first_name.val(),
250                            email: email.val(),
251                            isGuest: !self.options.isAthenticated
252                        }),
253                        success: function (success) {
254                            first_name.val('');
255                            email.val('');
256                            textarea.val('');
257                            swal({
258                                title: DourtalCommentResource.swal.CommentSubmitSuccessfuly,
259                                type: 'success',
260                                showConfirmButton: false,
261                                closeOnConfirm: true,
262                                allowOutsideClick: true,
263                                timer: 2000,
264                            });
265                            $('.submit-button').text(DourtalCommentResource.form.SubmitComment);
266                            $('.submit-button').css('pointer-events', 'unset');
267                        },
268                        error: function (err) {
269                            swal({
270                                title: err.responseJSON.details.length > 0 ? err.responseJSON.details[0].message : err.responseJSON.message,
271                                type: 'warning',
272                                showConfirmButton: false,
273                                closeOnConfirm: true,
274                                allowOutsideClick: true,
275                                timer: 2000,
276                            });
277                            $('.submit-button').text(DourtalCommentResource.form.SubmitComment);
278                            $('.submit-button').css('pointer-events', 'unset');
279                        }
280                    })
281                    
282                })
283            } else {
284                submit_button.click(function (e) {
285                    e.preventDefault();
286                    if (textarea.val() == '' || textarea.val() == null) {
287                        textArea_error.show();
288                    } else {
289                        textArea_error.hide()
290                    }
291
292                    var spinIcon = $('<i />');
293                    spinIcon.addClass('far fa-spinner fa-spin spinner');
294                    $('.submit-button').html(spinIcon);
295                    $('.submit-button').css('pointer-events', 'none');
296
297                    $.ajax({
298                        url: self.options.url_input,
299                        type: 'POST',
300                        headers: { "Authorization": `Bearer ${self.options.accessToken}`, "Accept-Language": `${self.options.lang}`},
301                        contentType: 'application/json-patch+json',
302                        data: JSON.stringify({
303                            categoryId: self.options.categoryId,
304                            categoryParentId: self.options.categoryParentId,
305                            categoryType: self.options.categoryType,
306                            organizationId: self.options.organizationId,
307                            link: link,
308                            parentId: null,
309                            content: textarea.val(),
310                            summaryOfPost: self.options.summeryOfPost,
311                            isGuest: !self.options.isAthenticated
312                        }),
313                        success: function (success) {
314                            swal({
315                                title: DourtalCommentResource.swal.CommentSubmitSuccessfuly,
316                                type: 'success',
317                                showConfirmButton: false,
318                                closeOnConfirm: true,
319                                allowOutsideClick: true,
320                                timer: 2000,
321                            });
322                            $('.submit-button').text(DourtalCommentResource.form.SubmitComment);
323                            $('.submit-button').css('pointer-events', 'unset');
324                            textarea.val('');
325                        },
326                        error: function (err) {
327                            swal({
328                                title: err.responseJSON.details.length > 0 ? err.responseJSON.details[0].message : err.responseJSON.message,
329                                type: 'warning',
330                                showConfirmButton: false,
331                                closeOnConfirm: true,
332                                allowOutsideClick: true,
333                                timer: 2000,
334                            });
335                            $('.submit-button').text(DourtalCommentResource.form.SubmitComment);
336                            $('.submit-button').css('pointer-events', 'unset');
337                        }
338                    })
339
340                    
341                })
342            }
343
344            return form_box;
345        },
346
347        buildFormPopup_: function (comment_id, parent_id) {
348            var self = this;
349
350            var form_wrapper = $('<div />');
351            form_wrapper.addClass('form-wrapper');
352
353            
354
355            var form_box = $('<div />');
356            form_box.addClass('form-popup');
357
358            //////// FORM HEADER /////////
359
360            var modal_header = $('<div />');
361            modal_header.addClass('modal-header');
362
363            // modal header
364            var modal_header_width = $('<div />');
365            modal_header_width.addClass('modal-header-width');
366
367            modal_header.append(modal_header_width);
368
369            var modal_reply_icon = $('<div />');
370            modal_reply_icon.addClass('modal-reply-icon');
371
372            var modal_close_icon = $('<div />');
373            modal_close_icon.addClass('modal-close-icon');
374
375            modal_header_width.append(modal_reply_icon);
376            modal_header_width.append(modal_close_icon);
377
378            var modal_icon = $('<div />');
379            modal_icon.addClass('modal-icon');
380
381            var modal_title = $('<div />');
382            modal_title.addClass('modal-title');
383            modal_title.text(DourtalCommentResource.form.SendForm);
384
385            modal_reply_icon.append(modal_icon);
386            modal_reply_icon.append(modal_title);
387
388            var reply_icon = $('<i />');
389            reply_icon.addClass("fal fa-comments");
390            reply_icon.attr('aria-hidden', true);
391
392            modal_icon.append(reply_icon);
393
394            var close_icon = $('<i />');
395            close_icon.addClass('far fa-times');
396            close_icon.attr('aria-hidden', true);
397
398            modal_close_icon.append(close_icon);
399
400            
401            form_wrapper.append(form_box);
402
403            form_box.append(modal_header);
404
405            //////// FORM BODY /////////
406
407            var send_comment_txt = $('<p />');
408            send_comment_txt.addClass('comment-text');
409            send_comment_txt.text(DourtalCommentResource.form.SendForm);
410
411            var form_elem = $('<form></form>');
412            form_elem.addClass('display-form');
413
414            form_box.append(send_comment_txt);
415            form_box.append(form_elem);
416
417            var display_inputs = $('<div />');
418            display_inputs.addClass('display-inputs');
419
420            //var secure_code = $('<div />');
421            //secure_code.addClass('secure-code');
422
423            var wrap_submit_div = $('<div />');
424
425            form_elem.append(display_inputs);
426            //form_elem.append(secure_code);
427            form_elem.append(wrap_submit_div);
428
429
430            var textarea_input = $('<div />');
431            textarea_input.addClass('input-textarea');
432
433
434            if (self.options.isAthenticated == false) {
435                var name_email_input = $('<div />');
436                name_email_input.addClass('name-email');
437
438                display_inputs.append(name_email_input);
439
440                var name_input = $('<div />');
441                name_input.addClass('input-name');
442
443                var email_input = $('<div />');
444                email_input.addClass('input-email');
445
446                name_email_input.append(name_input);
447                name_email_input.append(email_input);
448
449                var user_icon = $('<i />');
450                user_icon.addClass('far fa-user icon');
451                user_icon.attr('aria-hidden', true);
452
453                var first_name = $('<input />');
454                first_name.addClass("input first-name");
455                first_name.attr('type', 'text');
456                first_name.attr('placeholder', DourtalCommentResource.form.FirstLastName);
457
458                var first_name_error = $('<span />');
459                first_name_error.addClass('email_validation');
460                first_name_error.text(DourtalCommentResource.form.FirstLastNameError);
461                first_name_error.hide();
462
463                name_input.append(user_icon);
464                name_input.append(first_name);
465                name_input.append(first_name_error);
466
467                var email_icon = $('<i />');
468                email_icon.addClass('far fa-envelope icon');
469                email_icon.attr('aria-hidden', true);
470
471                var email = $('<input />');
472                email.addClass('input email-field');
473                email.attr('placeholder', DourtalCommentResource.form.Email);
474                email.attr('type', 'email');
475
476                var email_error = $('<span />');
477                email_error.addClass('email_validation');
478                email_error.text(DourtalCommentResource.form.EmailError);
479                email_error.hide();
480
481                email_input.append(email_icon);
482                email_input.append(email);
483                email_input.append(email_error);
484            }
485
486            display_inputs.append(textarea_input);
487
488
489
490            var comment_icon = $('<i />');
491            comment_icon.addClass('far fa-comment-alt icon');
492
493            var textarea = $('<textarea />');
494            textarea.addClass('input comment-textarea');
495            textarea.attr('placeholder', DourtalCommentResource.form.PutComment);
496
497            var textArea_error = $('<span />');
498            textArea_error.addClass('drt_textareaError');
499            textArea_error.text(DourtalCommentResource.form.PutCommentError);
500            textArea_error.hide();
501
502            textarea_input.append(comment_icon);
503            textarea_input.append(textarea);
504            textarea_input.append(textArea_error);
505
506            //var secure_field = $('<input />');
507            //secure_field.addClass("input secure-field");
508            //secure_field.attr('id', 'text');
509            //secure_field.attr('name', 'text');
510            //secure_field.attr('type', 'text');
511            //secure_field.attr('placeholder', DourtalCommentResource.form.EnterSecureCode);
512
513            //var secure_random_num = $('<div />');
514            //secure_random_num.addClass('secure-random-num');
515
516            //secure_code.append(secure_field);
517            //secure_code.append(secure_random_num);
518
519            //var wrap_div = $('<div />');
520
521            //var secure_txt = $('<p />');
522            //secure_txt.text('ZFK5600I');
523
524            //secure_random_num.append(wrap_div);
525            //secure_random_num.append(secure_txt);
526
527            //var sound_code = $('<a />');
528            //sound_code.addClass('sound-code');
529            //sound_code.attr('href', '#');
530
531            //var refresh_code = $('<a />');
532            //refresh_code.addClass('refresh-code');
533            //refresh_code.attr('href', '#');
534
535            //wrap_div.append(sound_code);
536            //wrap_div.append(refresh_code);
537
538            //var sound_icon = $('<i />');
539            //sound_icon.addClass('fas fa-volume-up');
540
541            //sound_code.append(sound_icon);
542
543            //var refresh_icon = $('<i />');
544            //refresh_icon.addClass('fas fa-redo-alt');
545
546            //refresh_code.append(refresh_icon);
547
548            //////// FORM FOOTER /////////
549
550            var submit_button = $('<button />');
551            submit_button.addClass('submit-button');
552            submit_button.text(DourtalCommentResource.form.SubmitComment);
553            submit_button.attr('type', 'submit');
554
555            wrap_submit_div.append(submit_button);
556
557
558            modal_close_icon.click(function () {
559                form_wrapper.css({ display: 'none' });
560            })
561
562            var link = window.location.href;
563
564            //////// FORM SUBMIT /////////
565
566            if (!self.options.isAthenticated) {
567                submit_button.click(function (e) {
568                    
569                    e.preventDefault();
570
571                    if (textarea.val() == '' || textarea.val() == null) {
572                        textArea_error.show();
573                    } else {
574                        textArea_error.hide()
575                    }
576
577                    if (first_name.val() == '' || first_name.val() == null) {
578                        first_name_error.show()
579                    } else {
580                        first_name_error.hide()
581                    }
582                    var email_value = email.val();
583                    if (email_value == '') {
584                        email_error.show();
585                    }
586                    if (IsEmail(email_value) == false) {
587                        email_error.show();
588                        return false;
589                    } else {
590                        email_error.hide();
591                    }
592                    
593                    function IsEmail(email) {
594                        var regex = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
595                        if (!regex.test(email)) {
596                            return false;
597                        } else {
598                            return true;
599                        }
600                    }
601                    var spinIcon = $('<i />');
602                    spinIcon.addClass('far fa-spinner fa-spin spinner');
603                    $('.submit-button').html(spinIcon);
604                    $('.submit-button').css('pointer-events', 'none');
605                    
606                    $.ajax({
607                        url: self.options.url_input,
608                        type: 'POST',
609                        header: { "Accept-Language": `${self.options.lang}`},
610                        contentType: 'application/json-patch+json',
611                        data: JSON.stringify({
612                            categoryId: self.options.categoryId,
613                            categoryParentId: self.options.categoryParentId,
614                            categoryType: self.options.categoryType,
615                            organizationId: self.options.organizationId,
616                            link: link,
617                            parentId: null,
618                            content: textarea.val(),
619                            summaryOfPost: self.options.summeryOfPost,
620                            name: first_name.val(),
621                            email: email.val(),
622                            isGuest: !self.options.isAthenticated
623                        }),
624                        success: function (success) {
625                            $('.form-wrapper').css('display', 'none');
626                            first_name.val('');
627                            email.val('');
628                            textarea.val('');
629                            swal({
630                                title: DourtalCommentResource.swal.CommentSubmitSuccessfuly,
631                                type: 'success',
632                                showConfirmButton: false,
633                                closeOnConfirm: true,
634                                allowOutsideClick: true,
635                                timer: 2000,
636                            });
637                            $('.submit-button').text(DourtalCommentResource.form.SubmitComment);
638                            $('.submit-button').css('pointer-events', 'unset');
639                        },
640                        error: function (err) {
641                            swal({
642                                title: err.responseJSON.details.length > 0 ? err.responseJSON.details[0].message : err.responseJSON.message,
643                                type: 'warning',
644                                showConfirmButton: false,
645                                closeOnConfirm: true,
646                                allowOutsideClick: true,
647                                timer: 2000,
648                            });
649                            $('.submit-button').text(DourtalCommentResource.form.SubmitComment);
650                            $('.submit-button').css('pointer-events', 'unset');
651                        }
652                    })
653
654                })
655            } else {
656                submit_button.click(function (e) {
657                    
658                    e.preventDefault();
659                    if (textarea.val() == '' || textarea.val() == null) {
660                        textArea_error.show();
661                    } else {
662                        textArea_error.hide()
663                    }
664                    var spinIcon = $('<i />');
665                    spinIcon.addClass('far fa-spinner fa-spin spinner');
666                    $('.submit-button').html(spinIcon)
667                    $('.submit-button').css('pointer-events', 'none');
668
669                    $.ajax({
670                        url: self.options.url_input,
671                        type: 'POST',
672                        headers: { "Authorization": `Bearer ${self.options.accessToken}`, "Accept-Language": `${self.options.lang}` },
673                        contentType: 'application/json-patch+json',
674                        data: JSON.stringify({
675                            categoryId: self.options.categoryId,
676                            categoryParentId: self.options.categoryParentId,
677                            categoryType: self.options.categoryType,
678                            organizationId: self.options.organizationId,
679                            link: link,
680                            parentId: null,
681                            content: textarea.val(),
682                            summaryOfPost: self.options.summeryOfPost,
683                            isGuest: !self.options.isAthenticated
684                        }),
685                        success: function (success) {
686                            $('.form-wrapper').css('display', 'none');
687                            swal({
688                                title: DourtalCommentResource.swal.CommentSubmitSuccessfuly,
689                                type: 'success',
690                                showConfirmButton: false,
691                                closeOnConfirm: true,
692                                allowOutsideClick: true,
693                                timer: 2000,
694                            });
695                            $('.submit-button').text(DourtalCommentResource.form.SubmitComment);
696                            $('.submit-button').css('pointer-events', 'unset');
697                            textarea.val('');
698                        },
699                        error: function (err) {
700                            swal({
701                                title: err.responseJSON.details.length > 0 ? err.responseJSON.details[0].message : err.responseJSON.message,
702                                    
703                                type: 'warning',
704                                showConfirmButton: false,
705                                closeOnConfirm: true,
706                                allowOutsideClick: true,
707                                timer: 2000,
708                            });
709                            $('.submit-button').text(DourtalCommentResource.form.SubmitComment);
710                            $('.submit-button').css('pointer-events', 'unset');
711                        }
712                    })
713
714
715                })
716            }
717
718            return form_wrapper;
719        },
720
721        buildPostBox_: function (parent_id, fullname, posted_date, posted_time, id, img) {
722            var self = this;
723
724            // modal box
725            var elem = $('<div></div>');
726            elem.addClass('modal');
727            elem.attr('comment_id', id);
728
729            var modal_form = $('<form />');
730            modal_form.addClass('modal-box');
731            modal_form.attr('action', self.options.url_input);
732            modal_form.attr('method', 'post');
733
734            elem.append(modal_form);
735
736            var modal_header = $('<div />');
737            modal_header.addClass('modal-header');
738
739            var modal_body = $('<div />');
740            modal_body.addClass('modal-body');
741
742            var modal_footer = $('<div />');
743            modal_footer.addClass('modal-footer');
744
745            modal_form.append(modal_header);
746            modal_form.append(modal_body);
747            modal_form.append(modal_footer);
748
749            // modal header
750            var modal_header_width = $('<div />');
751            modal_header_width.addClass('modal-header-width');
752
753            modal_header.append(modal_header_width);
754
755            var modal_reply_icon = $('<div />');
756            modal_reply_icon.addClass('modal-reply-icon');
757
758            var modal_close_icon = $('<div />');
759            modal_close_icon.addClass('modal-close-icon');
760
761            modal_header_width.append(modal_reply_icon);
762            modal_header_width.append(modal_close_icon);
763
764            var modal_icon = $('<div />');
765            modal_icon.addClass('modal-icon');
766
767            var modal_title = $('<div />');
768            modal_title.addClass('modal-title');
769            modal_title.text(DourtalCommentResource.modal.Answer);
770
771            modal_reply_icon.append(modal_icon);
772            modal_reply_icon.append(modal_title);
773
774            var reply_icon = $('<i />');
775            reply_icon.addClass("fal fa-reply");
776            reply_icon.attr('aria-hidden', true);
777
778            modal_icon.append(reply_icon);
779
780            var close_icon = $('<i />');
781            close_icon.addClass('far fa-times');
782            close_icon.attr('aria-hidden', true);
783
784            modal_close_icon.append(close_icon);
785
786            // modal body
787            var modal_body_width = $('<div />');
788            modal_body_width.addClass('modal-body-width');
789
790            modal_body.append(modal_body_width);
791
792            var modal_user = $('<div />');
793            modal_user.addClass('modal-user');
794
795            var modal_timeline = $('<div />');
796            modal_timeline.addClass('modal-timeline');
797
798            var modal_submit_comment = $('<div />');
799            modal_submit_comment.addClass('modal-submit-comment');
800
801            //var modal_secure_code = $('<div />');
802            //modal_secure_code.addClass('modal-secure-code');
803
804            modal_body_width.append(modal_user);
805            modal_body_width.append(modal_timeline);
806            modal_body_width.append(modal_submit_comment);
807            //modal_body_width.append(modal_secure_code);
808
809            var modal_user_img = $('<div />');
810            modal_user_img.addClass('modal-user-img');
811            modal_user_img.text(fullname);
812
813            var modal_user_info = $('<div />');
814            modal_user_info.addClass('modal-user-info');
815
816            modal_user.append(modal_user_img);
817            modal_user.append(modal_user_info);
818
819            var modal_user_name = $('<div />');
820            modal_user_name.addClass('modal-user-name');
821            modal_user_name.text(fullname);
822
823            if (self.options.enableTimeDate) {
824                var modal_user_date = $('<div />');
825                modal_user_date.addClass('modal-user-date');
826                modal_user_date.text(posted_date);
827
828                var modal_user_time = $('<div />');
829                modal_user_time.addClass('modal-user-time');
830                modal_user_time.text(posted_time);
831
832                var clockIcon = $('<i />');
833                clockIcon.addClass("far fa-clock clock-icon");
834                clockIcon.attr('aria-hidden', true);
835                clockIcon.attr('id', 'modal-clock');
836            }
837
838            modal_user_info.append(modal_user_name);
839            modal_user_info.append(clockIcon)
840            modal_user_info.append(modal_user_date);
841            modal_user_info.append(modal_user_time);
842
843            //////// USER IMAGES /////////
844
845            var user_default_img = $('<i />');
846            user_default_img.addClass('fas fa-user');
847
848            var modal_user_image = $('<img />');
849            modal_user_image.attr('src', img);
850           
851            var modal_user_img_comment = $('<div />');
852            modal_user_img_comment.addClass('modal-user-img-comment');
853
854            if (img == null || img == '') {
855                modal_user_img_comment.append(user_default_img);
856            } else {
857                modal_user_img_comment.append(modal_user_image);
858            }
859
860            //////// MODAL BOX FIELDS /////////
861
862            var display_inputs = $('<div />');
863            display_inputs.addClass('display-inputs');
864
865            var modal_input_textarea = $('<div />');
866            modal_input_textarea.addClass('modal-input-textarea');
867
868            modal_submit_comment.append(modal_user_img_comment);
869            modal_submit_comment.append(display_inputs);
870            modal_submit_comment.append(modal_input_textarea);
871
872            if (self.options.isAthenticated == false) {
873                var name_email_input = $('<div />');
874                name_email_input.addClass('name-email');
875
876                display_inputs.append(name_email_input);
877
878                var name_input = $('<div />');
879                name_input.addClass('input-name');
880
881                var email_input = $('<div />');
882                email_input.addClass('input-email');
883
884                name_email_input.append(name_input);
885                name_email_input.append(email_input);
886
887                var user_icon = $('<i />');
888                user_icon.addClass('far fa-user icon');
889                user_icon.attr('aria-hidden', true);
890
891                var first_name = $('<input />');
892                first_name.addClass("input first-name");
893                first_name.attr('type', 'text');
894                first_name.attr('placeholder', DourtalCommentResource.form.FirstLastName);
895
896                var first_name_error = $('<span />');
897                first_name_error.addClass('email_validation');
898                first_name_error.text(DourtalCommentResource.form.FirstLastNameError);
899                first_name_error.hide();
900
901                name_input.append(user_icon);
902                name_input.append(first_name);
903                name_input.append(first_name_error);
904
905                var email_icon = $('<i />');
906                email_icon.addClass('far fa-envelope icon');
907                email_icon.attr('aria-hidden', true);
908
909                var email = $('<input />');
910                email.addClass('input email-field');
911                email.attr('placeholder', DourtalCommentResource.form.Email);
912                email.attr('type', 'email');
913
914                var email_error = $('<span />');
915                email_error.addClass('email_validation');
916                email_error.text(DourtalCommentResource.form.EmailError);
917                email_error.hide();
918                    
919
920                email_input.append(email_icon);
921                email_input.append(email);
922                email_input.append(email_error);
923            }
924
925            var modal_textarea = $('<textarea />');
926            modal_textarea.addClass("input comment-textarea");
927            modal_textarea.attr('placeholder', DourtalCommentResource.form.PutComment);
928            modal_textarea.attr('name', parent_id);
929            modal_textarea.val();
930
931            var textArea_error = $('<span />');
932            textArea_error.addClass('drt_textareaError');
933            textArea_error.text(DourtalCommentResource.form.PutCommentError);
934            textArea_error.hide();
935
936            modal_input_textarea.append(modal_textarea);
937            modal_input_textarea.append(textArea_error);
938
939
940            //////// MODAL CAPTCHA BOX /////////
941
942            //var secure_field = $('<input />');
943            //secure_field.addClass("input secure-field");
944            //secure_field.attr('id', 'text');
945            //secure_field.attr('name', 'text');
946            //secure_field.attr('type', 'text');
947            //secure_field.attr('placeholder', DourtalCommentResource.form.EnterSecureCode);
948
949            //var secure_random_num = $('<div />');
950            //secure_random_num.addClass('secure-random-num');
951
952            //modal_secure_code.append(secure_field);
953            //modal_secure_code.append(secure_random_num);
954
955            //var wrap_div = $('<div />');
956
957            //var secure_txt = $('<p />');
958            //secure_txt.text('ZFK5600I');
959
960            //secure_random_num.append(wrap_div);
961            //secure_random_num.append(secure_txt);
962
963            //var sound_code = $('<a />');
964            //sound_code.addClass('sound-code');
965            //sound_code.attr('href', '#');
966
967            //var refresh_code = $('<a />');
968            //refresh_code.addClass('refresh-code');
969            //refresh_code.attr('href', '#');
970
971            //wrap_div.append(sound_code);
972            //wrap_div.append(refresh_code);
973
974            //var sound_icon = $('<i />');
975            //sound_icon.addClass('fas fa-volume-up');
976
977            //sound_code.append(sound_icon);
978
979            //var refresh_icon = $('<i />');
980            //refresh_icon.addClass('fas fa-redo-alt');
981
982            //refresh_code.append(refresh_icon);
983
984            // modal footer
985            var modal_buttons = $('<div />');
986            modal_buttons.addClass('modal-buttons');
987
988            modal_footer.append(modal_buttons);
989
990            var modal_submit = $('<button />');
991            modal_submit.addClass('modal-submit-button');
992            modal_submit.text(DourtalCommentResource.modal.Send);
993
994            var modal_cancel = $('<a />');
995            modal_cancel.addClass('modal-cancel-button');
996            modal_cancel.text(DourtalCommentResource.modal.Cancel);
997
998            modal_buttons.append(modal_submit);
999            modal_buttons.append(modal_cancel);
1000
1001            // close modal box on click events
1002            modal_cancel.click(function () {
1003                $(`[comment_id=${id}]`).css({ display: 'none' });
1004            });
1005
1006            modal_close_icon.click(function () {
1007                $(`[comment_id=${id}]`).css({ display: 'none' });
1008            });
1009
1010            var link = window.location.href;
1011
1012            // submit reply icon event
1013            if (!self.options.isAthenticated) {
1014                modal_submit.click(function (e) {
1015                    
1016                    e.preventDefault();
1017                    if (modal_textarea.val() == '' || modal_textarea.val() == null) {
1018                        textArea_error.show();
1019                    } else {
1020                        textArea_error.hide()
1021                    }
1022
1023                    if (first_name.val() == '' || first_name.val() == null) {
1024                        first_name_error.show()
1025                    } else {
1026                        first_name_error.hide()
1027                    }
1028                    var email_value = email.val();
1029                    if (email_value == '') {
1030                        email_error.show();
1031                    }
1032                    if (IsEmail(email_value) == false) {
1033                        email_error.show();
1034                        return false;
1035                    }
1036                    function IsEmail(email) {
1037                        var regex = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
1038                        if (!regex.test(email)) {
1039                            return false;
1040                        } else {
1041                            return true;
1042                        }
1043                    }
1044                    var spinIcon = $('<i />');
1045                    spinIcon.addClass('far fa-spinner fa-spin spinner');
1046                    $('.modal-submit-button').html(spinIcon);
1047                    $('.modal-submit-button').css('pointer-events', 'n
1047one');
1048                    
1049                    $.ajax({
1050                        url: self.options.url_input,
1051                        type: 'POST',
1052                        headers: { "Accept-Language": `${self.options.lang}`},
1053                        contentType: 'application/json-patch+json',
1054                        data: JSON.stringify({
1055                            categoryId: self.options.categoryId,
1056                            categoryParentId: self.options.categoryParentId,
1057                            categoryType: self.options.categoryType,
1058                            organizationId: self.options.organizationId,
1059                            link: link,
1060                            parentId: id,
1061                            content: modal_textarea.val(),
1062                            summaryOfPost: self.options.summeryOfPost,
1063                            name: first_name.val(),
1064                            email: email.val(),
1065                            isGuest: !self.options.isAthenticated
1066                        }),
1067                        success: function (success) {
1068                            swal({
1069                                title: DourtalCommentResource.swal.CommentSubmitSuccessfuly,
1070                                type: 'success',
1071                                showConfirmButton: false,
1072                                closeOnConfirm: true,
1073                                allowOutsideClick: true,
1074                                timer: 2000,
1075                            });
1076                            elem.hide();
1077                            modal_textarea.val('');
1078                            first_name.val('');
1079                            email.val('');
1080                            $('.modal-submit-button').text(DourtalCommentResource.modal.Send);
1081                            $('.modal-submit-button').css('pointer-events', 'unset');
1082                        },
1083                        error: function (err) {
1084                            swal({
1085                                title: err.responseJSON.details.length > 0 ? err.responseJSON.details[0].message : err.responseJSON.message,
1086                                type: 'warning',
1087                                showConfirmButton: false,
1088                                closeOnConfirm: true,
1089                                allowOutsideClick: true,
1090                                timer: 2000,
1091                            });
1092                            $('.modal-submit-button').text(DourtalCommentResource.modal.Send);
1093                            $('.modal-submit-button').css('pointer-events', 'unset');
1094                        }
1095                    })
1096                    
1097                })
1098            } else {
1099                modal_submit.click(function (e) {
1100                    
1101                    e.preventDefault();
1102
1103                    if (modal_textarea.val() == '' || modal_textarea.val() == null) {
1104                        textArea_error.show();
1105                    } else {
1106                        textArea_error.hide()
1107                    }
1108
1109                    var spinIcon = $('<i />');
1110                    spinIcon.addClass('far fa-spinner fa-spin spinner');
1111                    $('.modal-submit-button').html(spinIcon);
1112                    $('.modal-submit-button').css('pointer-events', 'none');
1113
1114                    $.ajax({
1115                        url: self.options.url_input,
1116                        type: 'POST',
1117                        headers: { "Authorization": `Bearer ${self.options.accessToken}`, "Accept-Language": `${self.options.lang}` },
1118                        contentType: 'application/json-patch+json',
1119                        data: JSON.stringify({
1120                            categoryId: self.options.categoryId,
1121                            categoryParentId: self.options.categoryParentId,
1122                            categoryType: self.options.categoryType,
1123                            organizationId: self.options.organizationId,
1124                            link: link,
1125                            parentId: id,
1126                            content: modal_textarea.val(),
1127                            summaryOfPost: self.options.summeryOfPost,
1128                            isGuest: !self.options.isAthenticated
1129                        }),
1130                        success: function (success) {
1131                            swal({
1132                                title: DourtalCommentResource.swal.CommentSubmitSuccessfuly,
1133                                type: 'success',
1134                                showConfirmButton: false,
1135                                closeOnConfirm: true,
1136                                allowOutsideClick: true,
1137                                timer: 2000,
1138                            });
1139                            elem.hide();
1140                            modal_textarea.val('')
1141                            $('.modal-submit-button').text(DourtalCommentResource.modal.Send);
1142                            $('.modal-submit-button').css('pointer-events', 'unset');
1143                        },
1144                        error: function (err) {
1145                            swal({
1146                                title: err.responseJSON.details.length > 0 ? err.responseJSON.details[0].message : err.responseJSON.message,
1147                                type: 'warning',
1148                                showConfirmButton: false,
1149                                closeOnConfirm: true,
1150                                allowOutsideClick: true,
1151                                timer: 2000,
1152                            });
1153                            $('.modal-submit-button').text(DourtalCommentResource.modal.Send);
1154                            $('.modal-submit-button').css('pointer-events', 'unset');
1155                        }
1156                    })
1157
1158                })
1159            }
1160
1161            return elem;
1162        },
1163
1164        buildUl_: function () {
1165            var self = this;
1166            var ul_elem = $('<ul></ul>');
1167            ul_elem.addClass('first-level-comment-box');
1168            ul_elem.attr('id', 'comment-level-one');
1169
1170            var preLoader = self.buildPreLoader(self.total_comment);
1171            ul_elem.append(preLoader);
1172
1173            var obj = JSON.parse(self.options.settings);
1174
1175            if (!obj.IsAllowDisplayCommenInInitialLoad) {
1176                ul_elem.css({ display: 'none' })
1177            } else {
1178                ul_elem.css({display: 'block'})
1179            }
1180
1181            return ul_elem;
1182            
1183        },
1184
1185        fetch_: function (pageSize, sortOrder, pageIndex) {
1186            var self = this;
1187            return $.ajax({
1188                url: self.options.url_get,
1189                headers: { "Accept-Language": `${self.options.lang}` },
1190                data: {
1191                    'organizationId': self.options.organizationId,
1192                    'categoryId': self.options.categoryId,
1193                    'sortOrder': sortOrder,
1194                    'pageIndex': pageIndex,
1195                    'pageSize': pageSize
1196                },
1197                dataType: 'json',
1198                success: function (results) {
1199                    results_ = results.data;
1200                    obj = JSON.parse(self.options.settings);
1201                    // results['comments']
1202                    
1203
1204                    if (results.data != undefined && results.data != null  ) {
1205
1206                        setTimeout(function () {
1207                            $('.drt_status').fadeOut();
1208                            $('.drt_preloader').delay(50).fadeOut(100);
1209                            $('.wrapper-comments').delay(50).css({ 'overflow': 'visible' });
1210                        }, 2000)
1211                    }
1212
1213                    // results['total_comment']
1214                    if (results.itemsCount != undefined )
1215                        self.total_comment = results.itemsCount;
1216
1217                    
1218                    if (pageIndex === 1) {
1219                        $('ul.first-level-comment-box').remove();
1220                        self.buildList_(results_);
1221                        self.display_();
1222                    } else {
1223
1224                        if ((self.options.pageIndex * pageSize) >= results.itemsCount) {
1225                            $('.show-more-button').css({ display: 'none' })
1226                        }
1227
1228                        moreItem = $.map(results_, function (obj, i) {     
1229                            return self.buildItemList_(obj);
1230                        });
1231                        
1232                        var preLoader = self.buildPreLoader();
1233                        $('.first-level-comment-box').append(preLoader)
1234                        setTimeout(function () {
1235                            $('.first-level-comment-box').append(moreItem)
1236                            $('.drt_status').fadeOut();
1237                            $('.drt_preloader').delay(50).fadeOut(100);
1238                            $('.wrapper-comments').delay(50).css({ 'overflow': 'visible' });
1239                        }, 1000)
1240
1241                    }
1242
1243                }
1244            });
1245        },
1246
1247        buildList_: function (results) {
1248            var self = this;
1249            self.comments = $.map(results, function (obj, i) {
1250                return self.buildItemList_(obj);
1251            });
1252        },
1253
1254        buildItemList_: function (comment_info) {
1255            var self = this;
1256
1257            var item = $('<li />');
1258
1259            item.attr('id', 'posted-' + comment_info.id);
1260            item.attr('class', `first-level-comment`);
1261            item.attr('data-sort-key', self.options.sortOrder);
1262
1263            // avatar-image
1264            var avatar = $('<div></div>');
1265            avatar.addClass('user-img-first-level');
1266
1267            var img_elem = $('<img/>');
1268            img_elem.attr('src', comment_info.pictureUrl);
1269            img_elem.attr('border', 0);
1270            img_elem.addClass('ui-corner-all');
1271
1272            var user_default_img = $('<i />');
1273            user_default_img.addClass('fas fa-user');
1274
1275            if (comment_info.pictureUrl == null || comment_info.pictureUrl == '') {
1276                avatar.append(user_default_img);
1277            }
1278            avatar.append(img_elem);
1279
1280            item.append(avatar);
1281
1282            // posted-comment-container
1283            var post_container = $('<div></div>');
1284            post_container.addClass('main-comment-box-first-level');
1285
1286            // posted-comment-head
1287            var post_head = $('<div></div>');
1288            post_head.addClass('user-info-first-level');
1289
1290            // user-fullname
1291            var username = $('<span></span>');
1292            username.addClass('user-name-first-level');
1293            username.html(comment_info.fullname + ' :');
1294
1295            var date_time_posted = $('<div />');
1296            date_time_posted.addClass('drt_postedDateTime');
1297
1298            post_head.append(username);
1299            post_head.append(date_time_posted);
1300
1301            post_container.append(post_head);
1302
1303            // posted time
1304            if (self.options.enableTimeDate) {
1305                var posted_date = $('<span></span>');
1306                posted_date.addClass('user-date-first-level');
1307                posted_date.attr('title', comment_info.createDate);
1308                posted_date.html(comment_info.createDate);
1309
1310                var posted_time = $('<span></span>');
1311                posted_time.addClass('user-time-first-level');
1312                posted_time.attr('title', comment_info.createTime);
1313                posted_time.html(comment_info.createTime);
1314
1315                var clockIcon = $('<i />');
1316                clockIcon.addClass("far fa-clock clock-icon");
1317                clockIcon.attr('aria-hidden', true);
1318
1319                date_time_posted.append(clockIcon);
1320                date_time_posted.append(posted_date);
1321                date_time_posted.append(posted_time)
1322            }
1323
1324            // posted-comment-txt
1325            var post_txt = $('<div></div>');
1326            post_txt.addClass('main-content-first-level');
1327            post_txt.html(comment_info.content);
1328            var obj = JSON.parse(self.options.settings);
1329            post_container.append(post_txt)
1330            if (!self.options.isAthenticated && obj.IsAllowCommentByGuest) {
1331                var post_foot = $('<div></div>');
1332                post_foot.addClass('reply');
1333            } else if (self.options.isAthenticated) {
1334                var post_foot = $('<div></div>');
1335                post_foot.addClass('reply');
1336            }
1337            // posted-comment-foot
1338            
1339
1340            // reply
1341            
1342            
1343            var reply_container = $('<span></span>');
1344            reply_container.addClass('post-reply');
1345
1346            var reply = $('<a></a>');
1347            reply.attr('href', '#');
1348            reply.attr('title', 'Reply');
1349
1350            var replyIcon = $('<i />');
1351            replyIcon.addClass("far fa-reply reply-comment");
1352
1353            reply.append(replyIcon);
1354
1355            var tootltipText = $('<span />');
1356            tootltipText.addClass('tooltip-text');
1357            tootltipText.text(DourtalCommentResource.itemList.Answer);
1358
1359            reply.append(tootltipText);
1360
1361            reply_container.append(reply);
1362
1363            
1364
1365            if (!self.options.isAthenticated && obj.IsAllowCommentByGuest) {
1366                post_foot.append(reply_container);
1367                post_container.append(post_foot);
1368            } else if(self.options.isAthenticated) {
1369                post_foot.append(reply_container);
1370                post_container.append(post_foot);
1371            }
1372            
1373            
1374
1375            if (comment_info.children != null) {
1376
1377                var post_num_replies = $('<div />');
1378                post_num_replies.addClass('submitted-replies');
1379                post_num_replies.attr('id', comment_info.id);
1380
1381
1382                var show_replies_txt = $('<span />');
1383                show_replies_txt.addClass('title-submitted-replies');
1384                show_replies_txt.text(DourtalCommentResource.itemList.ShowAnswer + ' ( ' + comment_info.numberOfReplies + ' ) ');
1385                
1386
1387                var show_arrow_icon = $('<span />');
1388                show_arrow_icon.addClass('show-comments-icon');
1389
1390                var arrow_icon = $('<i />');
1391                arrow_icon.addClass('fa fa-angle-up arrow-icon');
1392
1393                show_arrow_icon.append(arrow_icon);
1394
1395                post_num_replies.click(function () {
1396
1397                    ul_child_elem.toggle();
1398                    $('#' + comment_info.id + ' .show-comments-icon i').toggleClass('fa-angle-up fa-angle-down');
1399                    
1400                });
1401
1402
1403                var seperate_line = $('<span />');
1404                seperate_line.addClass('seperate-line');
1405
1406                post_num_replies.append(show_replies_txt);
1407                post_num_replies.append(show_arrow_icon);
1408                post_num_replies.append(seperate_line);
1409
1410                post_container.append(post_num_replies);
1411
1412            }
1413
1414            item.append(post_container);
1415
1416            
1417
1418            var ul_child_elem = $('<ul></ul>');
1419            ul_child_elem.addClass('posted-comment-childs');
1420
1421            // reply events-apply
1422            var postbox = self.buildPostBox_(comment_info.parentId, comment_info.fullname, comment_info.createDate, comment_info.createTime, comment_info.id, comment_info.pictureUrl);
1423            item.append(postbox);
1424            reply.on('click',function (e) {
1425                e.preventDefault();
1426                postbox.toggle();
1427            });
1428
1429
1430            // check if has childrens
1431            if (comment_info.children !== null) {
1432                for (var i = 0; i < comment_info.children.length; i++) {
1433                    var child = self.buildItemList_(comment_info.children[i]);
1434                    ul_child_elem.append(child);
1435                }            
1436            }
1437
1438            ul_child_elem.not('.modal').hide();
1439
1440            post_container.append(ul_child_elem);
1441         
1442            return item;
1443        },
1444
1445        buildCountList_: function (total_comment) {
1446            var self = this;
1447
1448            var obj = JSON.parse(self.options.settings)
1449
1450            self.$title_submitted_comments = $('<span />');
1451            self.$title_submitted_comments.addClass('title-submitted-comments');
1452            if (obj.IsAllowDisplayTotalCount) {
1453                self.$title_submitted_comments.text(self.total_comment + ' ' + DourtalCommentResource.counting.SubmitComment);
1454            } else {
1455                self.$title_submitted_comments.text(DourtalCommentResource.counting.SubmittedComment)
1456            }
1457
1458
1459            self.$arrow_icon = $('<i />');
1460            self.$arrow_icon.attr('class', 'fa fa-angle-down arrow-icon');
1461            self.$arrow_icon.attr('aria-hidden', 'true');
1462
1463            self.$show_comments_icon = $('<span />');
1464            self.$show_comments_icon.addClass('show-comments-icon');
1465            self.$show_comments_icon.append(self.$arrow_icon);
1466
1467            self.$seperate_line = $('<span />');
1468            self.$seperate_line.addClass('seperate-line');
1469
1470            self.$total_comments_part = $('<div />');
1471            self.$total_comments_part.addClass('submitted-comments');
1472            self.$total_comments_part.append(self.$title_submitted_comments);
1473            self.$total_comments_part.append(self.$show_comments_icon);
1474            self.$total_comments_part.append(self.$seperate_line);
1475            self.$total_comments_part.attr('id', 'submit-comment-icon');
1476
1477            obj = JSON.parse(self.options.settings);
1478            
1479            
1480            if (!obj.IsAllowDisplayCommenInInitialLoad) {
1481                self.$arrow_icon.removeClass('fa-angle-down');
1482                self.$arrow_icon.addClass('fa-angle-up');
1483            }
1484
1485            
1486
1487            self.$total_comments_part.click(function () {
1488                $('.first-level-comment-box').toggle(100);
1489                $('.sort-box').toggle(100);
1490                $('.show-more').toggle();
1491                $('#submit-comment-icon .show-comments-icon i').toggleClass('fa-angle-down fa-angle-up');
1492            })
1493
1494            if (self.total_comment == 0) {
1495                self.$total_comments_part.hide();
1496            }
1497            
1498
1499            return self.$total_comments_part;
1500        },
1501
1502        buildSortButtons: function () {
1503            var self = this;
1504
1505            self.$sort_newst_button = $('<button />');
1506            self.$sort_newst_button.addClass('newst');
1507            self.$sort_newst_button.attr('id', 'new');
1508            self.$sort_newst_button.attr('data-sort-key', 'newst');
1509            self.$sort_newst_button.text(self.options.newestText);
1510
1511            self.$sort_oldest_button = $('<button />');
1512            self.$sort_oldest_button.addClass('newst');
1513            self.$sort_oldest_button.attr('id', 'old');
1514            self.$sort_oldest_button.attr('data-sort-key', 'oldest');
1515            self.$sort_oldest_button.text(self.options.oldestText);
1516
1517            //self.$sort_most_replies_button = $('<button />');
1518            //self.$sort_most_replies_button.addClass('newst');
1519            //self.$sort_most_replies_button.attr('id', 'most');
1520            //self.$sort_most_replies_button.attr('data-sort-key', 'most-replies');
1521            //self.$sort_most_replies_button.text(self.options.mostRepliesText);
1522
1523            self.$sort_buttons = $('<div />');
1524            self.$sort_buttons.addClass('sort-buttons');
1525            self.$sort_buttons.append(self.$sort_newst_button);
1526            self.$sort_buttons.append(self.$sort_oldest_button);
1527            //self.$sort_buttons.append(self.$sort_most_replies_button);
1528
1529
1530             //sort data by newst comment id
1531            self.$sort_newst_button.on('click', function (e) {
1532                e.preventDefault();
1533                
1534                var obj = JSON.parse(self.options.settings);
1535                var ps = obj.CommentCountVisibleInFirstLevel * self.options.pageIndex;
1536                self.options.sortOrder = self.options.sortOrderAsc;
1537                self.fetch_(ps, self.options.sortOrderAsc, 1);
1538            });
1539
1540            //sort data by oldest comment id
1541            self.$sort_oldest_button.click(function (e) {
1542                e.preventDefault();
1543                var obj = JSON.parse(self.options.settings);
1544                var ps = obj.CommentCountVisibleInFirstLevel * self.options.pageIndex;
1545                self.options.sortOrder = self.options.sortOrderDsc;
1546                self.fetch_(ps, self.options.sortOrderDsc, 1);
1547            });
1548
1549            //sort data by most replies and childs
1550            //self.$sort_most_replies_button.click(function (e) {
1551            //    e.preventDefault();
1552            //    })
1553            //});
1554
1555
1556
1557            return self.$sort_buttons;
1558        },
1559
1560        buildSortPart: function (total_comment) {
1561            var self = this;
1562
1563            var sb = self.buildSortButtons();
1564
1565            self.$sort_amount_desc = $('<i />');
1566            self.$sort_amount_desc.addClass('fas fa-sort-amount-down');
1567
1568            self.$sort_base_on = $('<span />');
1569            self.$sort_base_on.addClass('sort-base-on');
1570            self.$sort_base_on.append(self.$sort_amount_desc);
1571            self.$sort_base_on.append(`<span>${DourtalCommentResource.sort.SortBaseOn}</span>`);
1572
1573            self.$sort_box = $('<div />');
1574            self.$sort_box.addClass('sort-box');
1575            self.$sort_box.append(self.$sort_base_on);
1576            self.$sort_box.append(sb);
1577
1578            var obj = JSON.parse(self.options.settings);
1579            if (!obj.IsAllowDisplayCommenInInitialLoad) {
1580                self.$sort_box.css({ display: 'none' })
1581            }
1582
1583            if (self.total_comment == 0) {
1584                self.$sort_box.hide();
1585            }
1586
1587            return self.$sort_box;
1588        },
1589
1590        buildShowMore: function (total_comment) {
1591            var self = this;
1592            self.$show_more_link = $('<button />');
1593            self.$show_more_link.addClass('show-more-button');
1594            self.$show_more_link.text(DourtalCommentResource.show.ShowMore);
1595
1596            self.$show_more = $('<div />');
1597            self.$show_more.addClass('show-more');
1598            self.$show_more.append(self.$show_more_link);
1599
1600            var obj = JSON.parse(self.options.settings)
1601
1602            //load more button
1603            $(document).ready(function () {
1604                if (!obj.IsAllowDisplayCommenInInitialLoad) {
1605                    self.$show_more.css({ display: 'none' });
1606                }
1607                self.$show_more_link.on('click', function (e) {
1608                    e.preventDefault();
1609                    $('.first-level-comment-box').css({ display: 'block' });
1610                    self.options.pageIndex = self.options.pageIndex + 1;
1611                    self.fetch_(obj.CommentCountVisibleInFirstLevel, obj.SortOrder, self.options.pageIndex);
1612                });
1613            })
1614
1615            if (self.total_comment == 0) {
1616                self.$show_more.hide();
1617            }
1618            
1619
1620            return self.$show_more
1621        },
1622        buildPreLoader: function (total_comment) {
1623            var self = this;
1624
1625            self.$preLoader_status = $('<div />');
1626            self.$preLoader_status.addClass('drt_status');
1627
1628            self.$preLoader_text = $('<p />');
1629            self.$preLoader_text.addClass('drt_preLoader_text');
1630            self.$preLoader_text.text(DourtalCommentResource.loader.PreLoader);
1631
1632            self.$preLoader_box = $('<div />');
1633            self.$preLoader_box.addClass('drt_preloader');
1634            self.$preLoader_box.append(self.$preLoader_status);
1635            self.$preLoader_box.append(self.$preLoader_text);
1636
1637            if (self.total_comment == 0) {
1638                self.$preLoader_box.hide();
1639            }
1640
1641            return self.$preLoader_box;
1642        },
1643
1644        buildPopupBoxButton: function () {
1645            var self = this;
1646
1647            self.$popup_button = $('<button />');
1648            self.$popup_button.addClass('drt_popupBox');
1649            self.$popup_button.text(DourtalCommentResource.button.PopupForm);
1650
1651            $(document).ready(function () {
1652                self.$popup_button.click(function (e) {
1653                    e.preventDefault();
1654                    $('.form-wrapper').css({ display: 'block' })
1655                })
1656            })
1657            
1658            return self.$popup_button;
1659        }, 
1660
1661        display_: function () {
1662            var self = this;
1663            var obj = JSON.parse(self.options.settings)
1664
1665            if (!obj.isActive) {
1666                self.$wrapper_comments = $('<div />');
1667                self.$wrapper_comments.addClass('wrapper-comments');
1668
1669                if (!self.options.isAthenticated && obj.IsAllowCommentByGuest && obj.HowDisplayCommentForm == 1) {
1670                    var form_elem1 = self.buildForm_(null, null);
1671                    self.$wrapper_comments.append(form_elem1);
1672                }
1673                if (self.options.isAthenticated && obj.HowDisplayCommentForm == 1) {
1674                    var form_elem1 = self.buildForm_(null, null);
1675                    self.$wrapper_comments.append(form_elem1);
1676                }
1677                var tc = self.buildCountList_(self.total_comment);
1678                var sb = self.buildSortPart(self.total_comment);
1679                self.$wrapper_comments.append(tc);
1680                self.$wrapper_comments.append(sb);
1681
1682                self.$rootlist = self.buildUl_();
1683                self.$rootlist.append(self.comments);
1684
1685
1686                self.$wrapper_comments.append(self.$rootlist);
1687
1688                self.$show_more_part = self.buildShowMore(self.total_comment);
1689                self.$wrapper_comments.append(self.$show_more_part);
1690
1691                
1692
1693                if (!self.options.isAthenticated && obj.IsAllowCommentByGuest && obj.HowDisplayCommentForm == 2) {
1694                    var form_elem2 = self.buildForm_(null, null);
1695                    self.$wrapper_comments.append(form_elem2);
1696                }
1697                if (self.options.isAthenticated && obj.HowDisplayCommentForm == 2) {
1698                    var form_elem2 = self.buildForm_(null, null);
1699                    self.$wrapper_comments.append(form_elem2);
1700                }
1701
1702                if (!self.options.isAthenticated && obj.IsAllowCommentByGuest && obj.HowDisplayCommentForm == 3) {
1703                    var popupBoxForm = self.buildPopupBoxButton();
1704                    self.$wrapper_comments.append(popupBoxForm);
1705                    var form_elem3 = self.buildFormPopup_(null, null);
1706                    self.$wrapper_comments.append(form_elem3);
1707                }
1708                if (self.options.isAthenticated && obj.HowDisplayCommentForm == 3) {
1709                    var form_elem3 = self.buildFormPopup_(null, null);
1710                    self.$wrapper_comments.append(form_elem3);
1711                    var popupBoxForm = self.buildPopupBoxButton();
1712                    self.$wrapper_comments.append(popupBoxForm);
1713                }
1714
1715
1716                if (self.options.transition === 'none' || !self.options.transition) {
1717                    self.$elem.html(self.$wrapper_comments)[self.options.transition](500);
1718                } else {
1719                    self.$elem[self.options.transition](500, function () {
1720                        self.$elem.html(self.$wrapper_comments)[self.options.transition](500);
1721                    });
1722                }      
1723            }
1724            
1725        }
1726    };
1727
1728    $.fn.comment = function (options) {
1729        return this.each(function () {
1730            var comment = Object.create(Comment);
1731
1732            comment.init_(options, this);
1733
1734            $.data(this, 'comment', comment);
1735
1736        });
1737    };
1738
1739    // options
1740    $.fn.comment.options = {
1741        url_get: '#',
1742        url_input: '#',
1743        transition: 'fadeToggle',
1744        enableTimeDate: true,
1745        maxRepliesVisible: 2,
1746        maxLoadMore: 1,
1747        sortOrder: 'desc',
1748        sortOrderAsc: 'desc',
1749        sortOrderDsc: 'acs',
1750        newestText: DourtalCommentResource.sort.NewstSort,
1751        oldestText: DourtalCommentResource.sort.OldestSort,
1752        mostRepliesText: 'بیشترین پاسخ',
1753        firstAndLastName: '',
1754        email: '',
1755        isAthenticated: true,
1756        accessToken: '',
1757        categoryId: '',
1758        categoryParentId: '',
1759        summeryOfPost: '',
1760        categoryType: null,
1761        organizationId: "",
1762        pageIndex: 1,
1763        settings: '{"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6","title": "string","IsActive": true,"isAllowCommentByGuest": true,"isAllowDisplayCommenInInitialLoad": true,"IsAllowDisplayTotalCount": true,"sortOrder": 1,"howDisplayCommentForm": 1,"commentCountVisibleInFirstLevel": 0,"commentCountVisibleInOtherLevel": 0,"isAllowNestedComments": true,"depthOfNestedComments": 0,"depthOfDisplayNestedComments": 0,"minimumOfCommentCharacterCount": 0,"maximumOfCommentCharacterCount": 0,"characterDisplayCount": 0}',
1764        lang: "fa-ir"
1765    };
1766
1767})(jQuery, window, document);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.