| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219 |
- /// <reference path="../../node_modules/@types/jquery/index.d.ts"/>
- var Comments;
- (function (Comments) {
- var Controller = (function () {
- function Controller() {
- this.comments = new CommentsContainer;
- this.renderedCount = 0;
- var showAll = $('.comments__show-all');
- this.renderedCount = showAll.parent().find('.comments__comment').length;
- this.loadUrl = showAll.data('load-url');
- showAll.on('click', this.loadComments.bind(this));
- this.form = new CommentForm(this);
- }
- Controller.prototype.loadComments = function () {
- $.ajax({
- url: this.loadUrl,
- dataType: 'json'
- }).done((function (data) {
- var $button = $('.comments__show-all');
- for (var i = 0; i < data.length; i++) {
- if (data.hasOwnProperty(i) && !this.comments.hasId(data[i].id)) {
- var comment = new Comment(data[i]);
- this.comments.push(comment);
- comment.rendered.insertBefore($button);
- }
- }
- $button.remove();
- }).bind(this));
- };
- Controller.prototype.pushComments = function (data) {
- for (var i = 0; i < data.length; i++) {
- if (data.hasOwnProperty(i)) {
- var comment = new Comment(data[i]);
- this.comments.push(comment);
- }
- }
- };
- Controller.prototype.addComment = function (data) {
- var comment = new Comment(data);
- this.comments.push(comment);
- if (data.answeredTo)
- comment.rendered.insertAfter($('.comments').find('[data-comment-id=' + data.answerTo + ']'));
- else
- comment.rendered.insertBefore($('.comments__show-all'));
- };
- return Controller;
- }());
- Comments.Controller = Controller;
- var CommentsContainer = (function () {
- function CommentsContainer() {
- }
- CommentsContainer.prototype.push = function () {
- var args = [];
- for (var _i = 0; _i < arguments.length; _i++) {
- args[_i] = arguments[_i];
- }
- return Array.prototype.push.apply(this, args);
- };
- CommentsContainer.prototype.hasId = function (id) {
- var list = Object.keys(this);
- for (var i in list) {
- if (this.hasOwnProperty(i)) {
- if (this[i].id === id) {
- return true;
- }
- }
- }
- return false;
- };
- return CommentsContainer;
- }());
- var CommentForm = (function () {
- function CommentForm(owner) {
- this.owner = owner;
- $('.comments__add-link').on('click', this.onAddClick.bind(this));
- $('.comments').on('click', '.comments__comment-reply', this.onAddClick.bind(this));
- this.form = $('.comments__add-popup-form');
- this.form.on('submit', this.submitFrom.bind(this));
- this.formData = [];
- }
- CommentForm.prototype.onAddClick = function (event) {
- event.preventDefault();
- $('.comments__add-error').remove();
- $('.comments__add-popup').show();
- $('.comments__add-back-log').show();
- var target = $(event.target);
- var targetId = 0;
- if (target.hasClass('comments__comment-reply')) {
- targetId = target.parents('.comments__comment').data('comment-id');
- }
- this.formData = { answerTo: targetId };
- };
- CommentForm.prototype.submitFrom = function (e) {
- e.preventDefault();
- var data = this.form.serializeArray();
- for (var i in this.form.serializeArray()) {
- if (data.hasOwnProperty(i)) {
- this.formData[data[i].name] = data[i].value;
- }
- }
- $('.comments__add-error').remove();
- $.ajax({
- url: this.owner.postEndpointUrl,
- data: { UserComments: this.formData },
- dataType: 'json',
- type: 'post'
- }).done((function (data) {
- console.dir(data);
- if (data.errors) {
- for (var fieldName in data.errors) {
- if (data.errors.hasOwnProperty(fieldName))
- $('<span class="comments__add-error">' + data.errors[fieldName][0] + '</span>').insertAfter(this.form.find('[name=' + fieldName + ']'));
- }
- }
- else {
- //this.form.parent().find('.comments__add-popup-close').click();
- this.form.html('<p>Ваш комментарий успешно отправлен. После одобрения модератором он появится на сайте.</p>');
- setTimeout((function () {
- this.form.parent().find('.comments__add-popup-close').click();
- }).bind(this), 3000);
- //this.owner.addComment(data.result);
- }
- }).bind(this)).fail((function (xhr) {
- console.dir(xhr.responseText);
- }).bind(this)).always((function () {
- this.formData = [];
- }).bind(this));
- };
- return CommentForm;
- }());
- var Comment = (function () {
- function Comment(data) {
- this.answerTo = 0;
- this.id = data.id;
- this.userName = data.userName;
- this.date = data.datetime;
- this.text = data.text;
- this.level = data.answerTo == 0 ? 1 : 2;
- this.answerTo = data.answerTo;
- }
- Object.defineProperty(Comment.prototype, "template", {
- get: function () {
- if (this._template !== undefined)
- return this._template;
- this._template = $('<div class="comments__comment"></div>');
- this._template.append('<div class="comments__comment-text"></div>');
- var info = $('<div class="comments__comment-info"></div>');
- info.append('<div class="comments__comment-name"></div>');
- info.append('<div class="comments__comment-date"></div>');
- info.append('<div class="comments__comment-reply">Ответить</div>');
- this._template.append(info);
- return this._template;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(Comment.prototype, "rendered", {
- get: function () {
- if (this._rendered !== undefined)
- return this._rendered;
- this._rendered = this.template.clone();
- return this._rendered;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(Comment.prototype, "text", {
- set: function (value) {
- this._text = value;
- this.rendered.find('.comments__comment-text').html(value);
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(Comment.prototype, "userName", {
- set: function (value) {
- this._userName = value;
- this.rendered.find('.comments__comment-name').html(value);
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(Comment.prototype, "date", {
- set: function (value) {
- this._date = value;
- var dateObject = new Date(value);
- this.rendered.find('.comments__comment-date').html(dateObject.toLocaleString("ru", {
- year: 'numeric',
- month: 'long',
- day: 'numeric',
- hour: '2-digit',
- minute: '2-digit'
- }).replace(' г.', ''));
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(Comment.prototype, "id", {
- get: function () {
- return this._id;
- },
- set: function (value) {
- this._id = value;
- this.rendered.data('comment-id', value);
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(Comment.prototype, "level", {
- set: function (value) {
- this._level = value;
- this.rendered.addClass('comments__comment--level' + value);
- },
- enumerable: true,
- configurable: true
- });
- return Comment;
- }());
- })(Comments || (Comments = {}));
|