You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
130 lines
5.0 KiB
130 lines
5.0 KiB
import $ from 'jquery';
|
|
import moment from 'moment';
|
|
import createHistory from 'history/createBrowserHistory';
|
|
|
|
// Likely
|
|
// import 'ilyabirman-likely/release/likely.css';
|
|
import 'ilyabirman-likely/release/likely.js';
|
|
|
|
moment.locale('ru');
|
|
|
|
// Создаем объект history API
|
|
const history = createHistory();
|
|
|
|
$(document).ready(function () {
|
|
// Обработчик отложенных курсов
|
|
setInterval(() => {
|
|
$('div[data-future-course]').each((_, element) => {
|
|
const courseTime = parseInt($(element).attr('data-future-course-time')) + LIL_SERVER_TIME_DIFF;
|
|
const relativeTimeString = moment(courseTime, 'X').fromNow();
|
|
$(element).find('div.courses__time').text(relativeTimeString);
|
|
});
|
|
}, 1000);
|
|
|
|
// Обработчик кнопки "Подгрузить еще"
|
|
$('.courses').on('click', 'button.load__btn', function () {
|
|
load_courses($(this).attr('data-next-page-url'), false);
|
|
});
|
|
|
|
// Обработчик выбора категории
|
|
$('div.js-select-option[data-category-option]').on('click', function (e) {
|
|
e.preventDefault();
|
|
const currentCategory = $(this).attr('data-category-name');
|
|
$('[data-category-name]').removeClass('active');
|
|
$(`[data-category-name=${currentCategory}]`).addClass('active');
|
|
history.replace($(this).attr('data-category-url'));
|
|
load_courses($(this).attr('data-category-url'), true);
|
|
});
|
|
|
|
// Обработчик лайков
|
|
$('.container').on('click', 'a[data-course-likes]', function (e) {
|
|
e.preventDefault();
|
|
if (typeof $(this).data('popup') !== 'undefined') {
|
|
return;
|
|
}
|
|
|
|
const likedCourseElement = $(this);
|
|
const courseID = $(this).attr('data-course-id');
|
|
let isLiked = !!parseInt($(this).attr('data-liked'));
|
|
let likesCount = parseInt($(this).attr('data-course-likes-count'));
|
|
isLiked = !isLiked;
|
|
likesCount = isLiked ? likesCount + 1 : likesCount - 1;
|
|
likedCourseElement.children('.likes__counter').text(likesCount);
|
|
likedCourseElement.attr('data-course-likes-count', likesCount);
|
|
if (isLiked) {
|
|
likedCourseElement.addClass('active');
|
|
likedCourseElement.attr('data-liked', '1');
|
|
} else {
|
|
likedCourseElement.removeClass('active');
|
|
likedCourseElement.attr('data-liked', '0');
|
|
}
|
|
|
|
$.ajax(`/course/${courseID}/like`, {
|
|
method: 'POST'
|
|
})
|
|
.done(function (data) {
|
|
if (data.success === true) {
|
|
likedCourseElement.children('.likes__counter').text(data.likes_count);
|
|
likedCourseElement.attr('data-course-likes-count', data.likes_count);
|
|
if (data.is_liked) {
|
|
likedCourseElement.addClass('active');
|
|
likedCourseElement.attr('data-liked', '1');
|
|
} else {
|
|
likedCourseElement.removeClass('active');
|
|
likedCourseElement.attr('data-liked', '0');
|
|
}
|
|
}
|
|
})
|
|
.fail(function (xhr) {
|
|
isLiked = !isLiked;
|
|
likesCount = isLiked ? likesCount + 1 : likesCount - 1;
|
|
likedCourseElement.children('.likes__counter').text(likesCount);
|
|
likedCourseElement.attr('data-course-likes-count', likesCount);
|
|
if (isLiked) {
|
|
likedCourseElement.addClass('active');
|
|
likedCourseElement.attr('data-liked', '1');
|
|
} else {
|
|
likedCourseElement.removeClass('active');
|
|
likedCourseElement.attr('data-liked', '0');
|
|
}
|
|
});
|
|
})
|
|
});
|
|
|
|
function load_courses(coursesUrl, fromStart) {
|
|
$('.courses__list').css('opacity', '0.9');
|
|
const buttonElement = $('.courses').find('button.load__btn');
|
|
if (!fromStart) {
|
|
buttonElement.addClass('loading');
|
|
}
|
|
$.ajax(coursesUrl, {
|
|
method: 'GET'
|
|
})
|
|
.done(function (data) {
|
|
if (data.success === true) {
|
|
if (!fromStart) {
|
|
$('.courses__list').append(data.content);
|
|
} else {
|
|
$('.courses__list').html(data.content);
|
|
}
|
|
if (data.next_url) {
|
|
buttonElement.attr('data-next-page-url', data.next_url);
|
|
buttonElement.show();
|
|
} else {
|
|
buttonElement.hide()
|
|
}
|
|
}
|
|
})
|
|
.fail(function (xhr) {
|
|
if (xhr.status === 404) {
|
|
// Нет результатов, скрываем кнопку
|
|
buttonElement.hide();
|
|
}
|
|
})
|
|
.always(function () {
|
|
$('.courses__list').css('opacity', '1');
|
|
if (buttonElement) {
|
|
buttonElement.removeClass('loading');
|
|
}
|
|
});
|
|
} |