Find the latest and most popular free viral adult video leaks at Ultrathots. Satisfy your desires with a vast selection of adult video categories, including Onlyfans leaks, Blondes, Big Tits, and more. High-quality porn videos and nude albums await you.
Ultrathots is your go-to platform for the latest and most popular free XXX adult video leaks. We understand that you want to satisfy your deepest desires without wasting any time, which is why we offer a seamless and exciting experience. With Ultrathots, you can stop searching and start watching instantly. At Ultrathots, we pride ourselves on offering high-quality, free porn video leaks and nude albums of sexy internet models. Our collection is regularly updated with the latest content from trusted sources, ensuring that you always have access to the freshest and most exciting material. Dive into the world of hardcore adult content with some of the naughtiest pornstars and sexy online models. Our platform features a wide variety of genres, guaranteeing that your desires will be catered to no matter your preference. Experience the heat and intensity of our content, all available for you to watch online at no cost.
') >= 0) {
window.location = url;
return false;
}
}
return true;
},
afterShow: function() {
if (!afterShowCallback) {
this.inner.find('[data-form="ajax"]').each(function () {
utilitiesAjaxForm($(this));
});
this.inner.find('[data-form="ajax-upload"]').each(function () {
initVideoUploadForm($(this));
});
this.inner.find('[data-fancybox="ajax"]').each(function() {
$(this).click(function(e) {
e.preventDefault();
utilitiesAjaxFancyBox($(this), this.href || $(this).attr('data-href'));
});
});
}
utilitiesLoadSmileys(this.inner);
if (afterShowCallback) {
afterShowCallback.call(this);
}
},
beforeClose: function() {
if (this.inner.find('[data-fancybox="refresh"]').exists()) {
if ($sender && $sender.attr('data-fancybox-refresh-id')) {
utilitiesReloadBlock($sender.attr('data-fancybox-refresh-id'), $sender, false, true);
} else {
window.location.reload();
}
} else if ($sender && $sender.attr('data-fancybox-refresh-id')) {
utilitiesReloadBlock($sender.attr('data-fancybox-refresh-id'), $sender, false, true);
}
return true;
},
helpers: {
overlay: {closeClick: false}
},
type: 'ajax',
topRatio: 0.3
});
};
var utilitiesReloadBlock = function(blockId, sender, scroll, animate) {
if (!blockId) {
window.location.reload();
return;
}
var params = null;
if (storage[blockId]) {
params = storage[blockId];
}
var args = {};
args.success = function (sender, html) {
storage[blockId] = params;
var animationOpacity = 0.1;
if (!animate) {
animationOpacity = 1;
}
if (scroll) {
utilitiesScrollTo($('#' + blockId));
}
$('#' + blockId).animate({opacity: animationOpacity}, animationSpeed, function () {
var div = document.createElement('div');
div.innerHTML = html;
var content = $(div).children().first();
$(content).css('opacity', animationOpacity);
$(this).replaceWith(content);
$('#' + blockId).animate({opacity: 1}, animationSpeed);
initAjaxLists($('#' + blockId));
});
};
var errorTries = 0;
args.error = function () {
errorTries++;
var hasFromParameter = false;
for (var paramName in params) {
if (params.hasOwnProperty(paramName)) {
if (paramName.indexOf('from') == 0 && parseInt(params[paramName])>1) {
params[paramName] = parseInt(params[paramName]) - 1;
if (errorTries > 1) {
params[paramName] = 1;
}
hasFromParameter = true;
}
}
}
if (!hasFromParameter) {
params = null;
}
if (errorTries > 1) {
delete args.error;
}
utilitiesGetBlock(blockId, sender, args, params);
};
utilitiesGetBlock(blockId, sender, args, params);
};
var initMenu = function () {
$('.navigation button').click(function() {
$(this).parents('.navigation').toggleClass('open');
});
};
var initTabs = function () {
var $tabLinks = $('.tabs-menu li a');
if ($tabLinks.exists()) {
var tabLinks = {};
var tabQuery = '';
var currentActiveTab = '';
$tabLinks.each(function() {
if ($(this).attr('href').indexOf('#') == 0) {
var tabId = $(this).attr('href');
if (!currentActiveTab || tabId == window.location.hash) {
currentActiveTab = tabId;
}
tabLinks[tabId] = $(this);
tabQuery += ',' + tabId;
}
});
var $tabs = $(tabQuery ? tabQuery.substr(1) : '');
$tabs.hide();
if (currentActiveTab) {
tabLinks[currentActiveTab].addClass('active');
$(currentActiveTab).show();
}
$tabLinks.click(function(e) {
if ($(this).attr('href').indexOf('#') == 0) {
e.preventDefault();
var tabId = $(this).attr('href');
$tabLinks.removeClass('active');
$tabs.hide();
$(tabId).show();
if (tabLinks[tabId]) {
tabLinks[tabId].addClass('active');
}
$(window).trigger('scroll');
}
});
}
};
var initFancyBox = function () {
$('[data-fancybox="ajax"]').each(function() {
$(this).click(function(e) {
e.preventDefault();
utilitiesAjaxFancyBox($(this), this.href || $(this).attr('data-href'));
});
});
$('.block-album .images a.item, .block-screenshots a.item, .list-albums-images a, .list-videos-screenshots a').fancybox({
openEffect: 'none',
closeEffect: 'none',
prevEffect: 'none',
nextEffect: 'none',
helpers: {
title: {
type: 'inside'
},
buttons: {
position: 'bottom'
}
}
});
if (window.location.href.indexOf('?login') > 0) {
$('#login').click();
}
if (window.location.href.indexOf('?signup') > 0) {
$('#signup').click();
}
};
var initRating = function () {
var $ratingContainer = $('.rating-container');
var $links = $ratingContainer.find('.rate-like, .rate-dislike');
$links.click(function(e) {
e.preventDefault();
var $link = $(this);
if ($link.hasClass('disabled') || $link.hasClass('voted')) {
return;
}
var vote = parseInt($link.attr('data-vote')) || 0;
var videoId = $link.attr('data-video-id');
var albumId = $link.attr('data-album-id');
var playlistId = $link.attr('data-playlist-id');
var postId = $link.attr('data-post-id');
var modelId = $link.attr('data-model-id');
var csId = $link.attr('data-cs-id');
var dvdId = $link.attr('data-dvd-id');
var flagId = $link.attr('data-flag-id');
if (videoId || albumId || playlistId || modelId || csId || postId || dvdId) {
utilitiesAjaxRequest($link, {action: 'rate', video_id: videoId, album_id: albumId, playlist_id: playlistId, model_id: modelId, cs_id: csId, post_id: postId, dvd_id: dvdId, vote: vote}, function(json) {
if (json['status']=='success') {
$links.addClass('disabled');
$link.removeClass('disabled').addClass('voted');
$ratingContainer.find('.voters').html($ratingContainer.find('.voters').attr('data-success'));
var $scale = $ratingContainer.find('.scale');
var oldRating = parseFloat($scale.attr('data-rating'));
var oldRatingVotes = parseInt($scale.attr('data-votes'));
if (oldRatingVotes > 0) {
if (oldRating == 0) {
oldRatingVotes = 0;
}
var newRating = (oldRating * oldRatingVotes + vote) / (oldRatingVotes + 1) / 5 * 100;
if (newRating > 100) {
newRating = 100;
}
$ratingContainer.find('.scale').css({width: newRating + '%'});
}
} else {
$links.addClass('disabled');
$ratingContainer.find('.voters').html($ratingContainer.find('.voters').attr('data-error'));
}
});
if (flagId) {
utilitiesAjaxRequest($link, {action: 'flag', video_id: videoId, album_id: albumId, playlist_id: playlistId, postId: postId, dvdId: dvdId, flag_id: flagId}, function() {});
}
}
});
};
var initAddToFavourites = function () {
$('body').on('click', '.btn-favourites li a', function (e) {
var $link = $(this);
var videoId = $link.attr('data-video-id');
var videoUrl = $link.attr('data-video-dir'); // Используем этот URL
var albumId = $link.attr('data-album-id');
var favType = $link.attr('data-fav-type') || 0;
var createPlaylistUrl = $link.attr('data-create-playlist-url');
var playlistId = $link.attr('data-playlist-id') || 0;
if (videoId || albumId) {
e.preventDefault();
if ($link.hasClass('delete')) {
utilitiesAjaxRequest2(videoUrl, $link.parents('li'), {action: 'delete_from_favourites', video_id: videoId, album_id: albumId, fav_type: favType, playlist_id: playlistId}, function(json) {
if (json['status'] == 'success') {
if (playlistId > 0) {
$link.parents('li').addClass('hidden');
$link.parents('ul').find('#add_playlist_' + playlistId).removeClass('hidden');
} else {
$link.parents('li').addClass('hidden');
$link.parents('ul').find('#add_fav_' + favType).removeClass('hidden');
}
}
});
} else {
if (favType == 10 && !playlistId) {
if (createPlaylistUrl) {
utilitiesAjaxFancyBox($link, createPlaylistUrl, function () {
var $form = this.inner.find('form');
utilitiesAjaxForm($form, {
success: function($form, newPlaylistData) {
$.fancybox.close();
newPlaylistData = $(newPlaylistData);
var $playlistDiv = newPlaylistData.find('[data-playlist-id]');
playlistId = $playlistDiv.attr('data-playlist-id');
var playlistTitle = $playlistDiv.attr('data-playlist-title');
if (playlistId) {
utilitiesAjaxRequest2(videoUrl, $link.parents('li'), {action: 'add_to_favourites', video_id: videoId, album_id: albumId, fav_type: favType, playlist_id: playlistId}, function(json) {
if (json['status'] == 'success') {
$('.btn-favourites ul.playlist-sublist').each(function() {
var $ul = $(this);
var $newAddItem = $ul.find('#add_playlist_').clone(true, true);
$newAddItem.find('a').each(function() {
$(this).attr('data-playlist-id', playlistId);
$(this).attr('href', $(this).attr('href').replace('%ID%', playlistId));
$(this).html($(this).html().replace('%1%', playlistTitle));
});
$newAddItem.attr('id', 'add_playlist_' + playlistId);
$ul.prepend($newAddItem);
var $newDeleteItem = $ul.find('#delete_playlist_').clone(true, true);
$newDeleteItem.find('a').each(function() {
$(this).attr('data-playlist-id', playlistId);
$(this).attr('href', $(this).attr('href').replace('%ID%', playlistId));
$(this).html($(this).html().replace('%1%', playlistTitle));
});
$newDeleteItem.attr('id', 'delete_playlist_' + playlistId);
$ul.prepend($newDeleteItem);
if ($ul.is($link.parents('ul.playlist-sublist'))) {
$newDeleteItem.removeClass('hidden');
} else {
$newDeleteItem.addClass('hidden');
$newAddItem.removeClass('hidden');
}
});
}
});
}
}
});
});
}
} else {
utilitiesAjaxRequest2(videoUrl, $link.parents('li'), {action: 'add_to_favourites', video_id: videoId, album_id: albumId, fav_type: favType, playlist_id: playlistId}, function(json) {
if (json['status'] == 'success') {
if (playlistId > 0) {
$link.parents('li').addClass('hidden');
$link.parents('ul').find('#delete_playlist_' + playlistId).removeClass('hidden');
} else {
$link.parents('li').addClass('hidden');
$link.parents('ul').find('#delete_fav_' + favType).removeClass('hidden');
}
}
});
}
}
}
});
};
var initErrorFlaggingForm = function () {
var $blockFlagging = $('.block-flagging');
if ($blockFlagging.exists()) {
var $flaggingForm = $blockFlagging.find('form');
if ($flaggingForm.exists()) {
$flaggingForm.each(function () {
utilitiesAjaxForm($(this), {
success: function($form) {
$form.find('.success').show();
$form.find('.block-radios, .block-textarea').hide();
}
});
});
}
}
};
var initShareForm = function () {
var $blockShare = $('.block-share');
if ($blockShare.exists()) {
if (typeof window['getEmbed'] == 'function') {
$blockShare.find('.embed-code').val(window['getEmbed']());
}
$blockShare.find('.embed-button').click(function (e) {
e.preventDefault();
if (typeof window['getEmbed'] == 'function') {
var embedSize = $(this).attr('data-embed-size');
if (embedSize && embedSize.indexOf('x') > 0) {
var embedWidth = parseInt(embedSize.substr(0, embedSize.indexOf('x')));
var embedHeight = parseInt(embedSize.substr(embedSize.indexOf('x') + 1));
$blockShare.find('.embed-code').val(window['getEmbed'](embedWidth, embedHeight));
}
}
});
$blockShare.find('.embed-code-custom-width, .embed-code-custom-height').on('keyup blur', function () {
var $widthField = $blockShare.find('.embed-code-custom-width');
var $heightField = $blockShare.find('.embed-code-custom-height');
if (parseInt($widthField.val()) && parseInt($heightField.val())) {
$blockShare.find('.embed-code-custom-width-label').html(parseInt($widthField.val()));
$blockShare.find('.embed-code-custom-height-label').html(parseInt($heightField.val()));
$blockShare.find('.embed-button-custom').attr('data-embed-size', parseInt($widthField.val()) + 'x' + parseInt($heightField.val()));
}
});
}
};
var initCommentForm = function () {
var $blockComments = $('.block-comments');
var $blockNewComment = $blockComments.find('.block-new-comment');
if ($blockComments.exists() && $blockNewComment.exists()) {
$blockComments.find('.toggle-button').click(function (e) {
e.preventDefault();
$(this).toggleClass('active');
$blockNewComment.toggle();
$blockComments.find('.success').hide();
if ($blockNewComment.is(':visible')) {
var $captcha = $blockNewComment.find('.captcha-control img');
if ($captcha.exists()) {
if ($captcha.attr('data-src')) {
$captcha.attr('src', $captcha.attr('data-src').replace(new RegExp('rand=\\d+'),'rand=' + new Date().getTime()));
} else {
$captcha.attr('src', $captcha.attr('src').replace(new RegExp('rand=\\d+'),'rand=' + new Date().getTime()));
}
}
}
utilitiesLoadSmileys($blockNewComment);
});
var $commentsForm = $blockComments.find('form');
if ($commentsForm.exists()) {
utilitiesAjaxForm($commentsForm, {
success: function($form, newCommentData) {
var $anonymousUsernameField = $form.find('[name="anonymous_username"]');
var anonymousUsername = $anonymousUsernameField.val();
if (anonymousUsername) {
$.cookie('kt_anonymous_username', anonymousUsername, {expires: 365, path: '/', samesite: 'Lax'});
}
$form.get(0).reset();
$anonymousUsernameField.val(anonymousUsername || '');
var $captcha = $form.find('.captcha-control img');
if ($captcha.exists()) {
$captcha.attr('src', $captcha.attr('src').replace(new RegExp('rand=\\d+'),'rand=' + new Date().getTime()));
}
if (typeof grecaptcha == 'object') {
$form.find('[data-recaptcha-key]').each(function() {
var recaptchaId = $(this).attr('data-recaptcha-id');
if (recaptchaId) {
grecaptcha.reset(recaptchaId);
}
});
}
if ($blockComments.find('.toggle-button').exists())
{
$blockNewComment.hide();
$blockComments.find('.toggle-button').removeClass('active');
}
var commentsBlockId = $blockComments.attr('data-block-id');
var $commentsList = $('.list-comments');
if (newCommentData && newCommentData['approved'] && commentsBlockId && $commentsList.exists()) {
var args = {
success: function(sender, html) {
var resultElement = document.createElement('DIV');
resultElement.innerHTML = html;
var $newItem = $(resultElement).find('.item[data-comment-id="' + (newCommentData['comment_id'] || newCommentData['entry_id']) + '"]').addClass('hidden');
$commentsList.find('#' + commentsBlockId + '_items').prepend($newItem);
setTimeout(function() {
$commentsList.show();
$newItem.fadeIn();
}, 200);
}
};
utilitiesGetBlock(commentsBlockId, null, args);
} else {
$commentsForm.find('.success').show();
}
}
});
}
$commentsForm.find('[name="anonymous_username"]').val($.cookie('kt_anonymous_username') || '');
}
};
var initCommentActions = function () {
$('.list-comments').on('click', '.comment-options a', function(e) {
var $link = $(this);
var $item = $(this).parents('.item');
var $container = $(this).parents('.comment-options');
var $rating = $container.find('.comment-rating');
var $ratingLinks = $container.find('.comment-like, .comment-dislike');
var commentId = $item.attr('data-comment-id');
if (($link.hasClass('comment-like') || $link.hasClass('comment-dislike'))) {
e.preventDefault();
if ($link.hasClass('disabled')) {
return;
}
var increment = ($link.hasClass('comment-dislike') ? -1 : 1);
utilitiesAjaxRequest($link, {action: 'vote_comment', vote: increment, comment_id: commentId}, function(json) {
if (json['status'] == 'success') {
$ratingLinks.fadeOut();
if ($rating.exists()) {
var ratingValue = parseInt($rating.html());
if (!isNaN(ratingValue)) {
ratingValue += increment;
$rating.html(ratingValue);
if (ratingValue > 0) {
$rating.addClass('positive');
} else if (ratingValue < 0) {
$rating.addClass('negative');
$item.addClass('dim-comment');
} else if (ratingValue == 0) {
$rating.removeClass('positive').removeClass('negative');
$item.removeClass('dim-comment');
}
}
}
} else {
$ratingLinks.addClass('disabled');
}
});
} else if ($link.hasClass('comment-edit')) {
e.preventDefault();
$.fancybox($('.popup-edit-comment').clone(true, true), {
afterShow: function () {
var $form = this.inner.find('form');
$form.find('[name="comment_id"], [name="entry_id"]').val(commentId);
var originalText = $item.find('.original-text').html() || '';
originalText = originalText.replace(/ /gi, '\n').replace(/>/gi, '>').replace(/</gi, '<').replace(/"/gi, '"');
originalText = originalText.replace(//gi, '$1');
$form.find('[name="comment"], [name="entry"]').val(originalText);
utilitiesAjaxForm($form, {
success: function() {
$.fancybox.close();
var $blockComments = $('.block-comments');
var commentsBlockId = $blockComments.attr('data-block-id');
if (commentsBlockId) {
var args = {
success: function(sender, html) {
var resultElement = document.createElement('DIV');
resultElement.innerHTML = html;
var newCommentText = $(resultElement).find('.item[data-comment-id="' + commentId + '"] .comment-text').html() || '';
$item.find('.comment-text').html(newCommentText);
}
};
utilitiesGetBlock(commentsBlockId, null, args);
}
}
});
utilitiesLoadSmileys(this.inner);
},
helpers: {
overlay: {closeClick: false}
},
topRatio: 0.3
});
}
});
};
var initAjaxLists = function ($container) {
if (!$container) {
$container = $(document);
if (typeof(Storage) !== 'undefined') {
var ajaxIds = {};
$container.find('[data-action="ajax"]').each(function() {
var id = $(this).attr('data-block-id');
if (!ajaxIds[id]) {
ajaxIds[id] = true;
}
});
var userId = '';
if (pageContext && pageContext['userId']) {
userId = pageContext['userId'] + ':';
}
for (var blockId in ajaxIds) {
if (ajaxIds.hasOwnProperty(blockId)) {
var html = sessionStorage.getItem(userId + location.href + '#' + blockId);
if (!html) {
html = sessionStorage.getItem(location.href + '#' + blockId);
}
if (html) {
$('#' + blockId).html(html).find('[data-fancybox="ajax"]').each(function() {
$(this).click(function(e) {
e.preventDefault();
utilitiesAjaxFancyBox($(this), this.href || $(this).attr('data-href'));
});
});
}
var params = sessionStorage.getItem(userId + location.href + '#' + blockId + ':params');
if (!params) {
params = sessionStorage.getItem(location.href + '#' + blockId + ':params');
}
if (params) {
try {
storage[blockId] = JSON.parse(params);
} catch (e) {}
if (listNonCachableBlocks[blockId]) {
$('#' + blockId).find('img.lazy-load').removeClass('lazy-load');
utilitiesReloadBlock(blockId, blockId, false, false);
}
}
}
}
}
} else {
$container.find('[data-fancybox="ajax"]').each(function() {
$(this).click(function(e) {
e.preventDefault();
utilitiesAjaxFancyBox($(this), this.href || $(this).attr('data-href'));
});
});
}
if ($.fn.Lazy) {
var webP = new Image();
webP.onload = webP.onerror = function() {
if (webP.height == 2) {
$container.find('img.lazy-load[data-webp]').each(function () {
$(this).attr('data-original', $(this).attr('data-webp'));
});
}
$container.find('img.lazy-load').Lazy(utilitiesMergeOptions(lazyLoadDefOptions, 'lazyload'));
};
webP.src = 'data:image/webp;base64,UklGRjoAAABXRUJQVlA4IC4AAACyAgCdASoCAAIALmk0mk0iIiIiIgBoSygABc6WWgAA/veff/0PP8bA//LwYAAA';
}
if ($.fn.thumbs) {
$container.find('img[data-cnt]').thumbs();
}
if ($.fn.videopreview) {
$container.find('img[data-preview]').videopreview();
}
$container.find('[data-action="ajax"], [data-action="inputpage"]').on('click keydown', function (e) {
if (e.type == 'click') {
e.preventDefault();
}
var args = {};
var $sender = $(this);
var appendTo = $sender.attr('data-append-items-to');
var maxQueries = parseInt($sender.attr('data-max-queries')) || 0;
var blockId = $sender.attr('data-block-id');
if (!blockId) {
return;
}
var containerId = $sender.attr('data-container-id');
if (maxQueries && appendTo) {
var currentQueries = parseInt($('#' + appendTo).attr('data-current-queries')) || 0;
if (currentQueries < maxQueries) {
currentQueries++;
if (currentQueries == maxQueries) {
$('#' + containerId).remove();
} else {
$('#' + appendTo).attr('data-current-queries', currentQueries);
}
} else {
return;
}
}
var params = utilitiesParseParameters($sender.attr('data-parameters'));
if ($sender.is('input')) {
if (e.type == 'click') {
return;
}
if (e.keyCode != 13 && e.key != 'Enter' && e.key != 'enter') {
return;
}
var paginationVar = $sender.attr('data-pagination-var');
var paginationValue = parseInt($sender.val());
if (!paginationVar || !paginationValue) {
return;
}
params[paginationVar] = paginationValue;
}
var userId = '';
if (pageContext && pageContext['userId']) {
userId = pageContext['userId'] + ':';
}
args.success = function (sender, html) {
if (appendTo) {
var resultElement = document.createElement('DIV');
resultElement.innerHTML = html;
if (containerId) {
var $newContainer = $(resultElement).find('#' + containerId);
if ($newContainer.exists()) {
$('#' + containerId).replaceWith($newContainer);
initAjaxLists($newContainer);
} else {
$('#' + containerId).remove();
}
}
var $itemsToAppend = $(resultElement).find('#' + appendTo + ' .item');
$itemsToAppend.css({display: 'none'});
if ($('#' + appendTo).attr('data-append-to-beginning') == 'true') {
$itemsToAppend.insertBefore($('#' + appendTo).find('.item').first());
} else {
$itemsToAppend.insertAfter($('#' + appendTo).find('.item').last());
}
$itemsToAppend.fadeIn().promise().done(function () {
for (var paramName in params) {
if (params.hasOwnProperty(paramName)) {
if (paramName.indexOf('from') == 0 && parseInt(params[paramName])>1) {
delete params[paramName];
break;
}
}
}
});
initAjaxLists($itemsToAppend);
} else {
utilitiesScrollTo($('#' + blockId));
$('#' + blockId).animate({opacity: 0.1}, animationSpeed, function () {
var div = document.createElement('div');
div.innerHTML = html;
var content = $(div).find('#' + blockId);
$(content).css('opacity', '0.1');
$(this).replaceWith(content);
$('#' + blockId).animate({opacity: 1}, animationSpeed);
initAjaxLists($('#' + blockId));
});
}
};
utilitiesGetBlock(blockId, containerId ? $('#' + containerId) : $sender, args, params);
});
$container.find('[data-rt]').mousedown(function() {
var rotatorParams = $(this).attr('data-rt');
if (rotatorParams) {
var url = window.location.href;
if (url.indexOf('#') > 0) {
url = url.substring(0, url.indexOf('#'));
}
var img = new Image();
img.src = url + (url.indexOf('?') >= 0 ? '&' : '?') + 'mode=async&action=rotator_videos&pqr=' + rotatorParams;
$(this).attr('data-rt', '');
}
});
var playlistFunction;
$container.find('[data-playlist-item]').click(playlistFunction = function(e) {
if (e) {
e.preventDefault();
}
$container.find('[data-playlist-item]').removeClass('selected');
var $item = $(this);
$item.addClass('selected');
var playlistItemUrl = $item.attr('data-playlist-item');
if (playlistItemUrl) {
storage['playlist_state'] = playlistItemUrl;
var args = {};
args.url = playlistItemUrl;
args.success = function (sender, html) {
$('.player').html('').append($(html.trim()).find('.player-holder'));
$('.player-holder').find('[data-fancybox="ajax"]').each(function() {
$(this).click(function(e) {
e.preventDefault();
utilitiesAjaxFancyBox($(this), this.href || $(this).attr('data-href'));
});
});
$('.player-holder').find('[data-form="ajax"]').each(function () {
utilitiesAjaxForm($(this));
});
if (e) {
setTimeout(function () {
utilitiesScrollTo($('.player'), 0);
}, 0);
}
};
utilitiesGetBlock('video_view_video_view', $item, args);
}
});
if (!storage['playlist_state']) {
var $defaultItem = $container.find('[data-playlist-item]').first();
if ($defaultItem.exists()) {
$defaultItem.addClass('selected');
playlistFunction.call($defaultItem);
}
} else {
$container.find('[data-playlist-item]').each(function() {
if ($(this).attr('data-playlist-item') == storage['playlist_state']) {
$(this).addClass('selected');
}
});
}
$container.find('[data-fav-video-id]').click(function(e) {
e.preventDefault();
e.stopPropagation();
var $link = $(this);
var videoId = $link.attr('data-fav-video-id');
var favType = $link.attr('data-fav-type') || 0;
utilitiesAjaxRequest($link, {action: 'add_to_favourites', video_id: videoId, video_ids: [videoId], fav_type: favType, playlist_id: 0}, function(json) {
if (json['status'] == 'failure' && json['errors'] && json['errors'][0] && json['errors'][0]['code'] == 'not_logged_in') {
if (pageContext && pageContext['loginUrl']) {
utilitiesAjaxFancyBox($link, pageContext['loginUrl']);
}
} else {
$link.addClass('fixed');
}
});
});
$container.find('[data-fav-album-id]').click(function(e) {
e.preventDefault();
e.stopPropagation();
var $link = $(this);
var albumId = $link.attr('data-fav-album-id');
var favType = $link.attr('data-fav-type') || 0;
utilitiesAjaxRequest($link, {action: 'add_to_favourites', album_id: albumId, album_ids: [albumId], fav_type: favType}, function(json) {
if (json['status'] == 'failure' && json['errors'] && json['errors'][0] && json['errors'][0]['code'] == 'not_logged_in') {
if (pageContext && pageContext['loginUrl']) {
utilitiesAjaxFancyBox($link, pageContext['loginUrl']);
}
} else {
$link.addClass('fixed');
}
});
});
function createDeleteCallback($form, $sender, blockId) {
return function(json) {
if (json['status'] == 'success') {
utilitiesReloadBlock(blockId, $sender, true, true);
if ($form.attr('data-refresh-block-ids')) {
var blockIds = $form.attr('data-refresh-block-ids').split(',');
for (var j = 0; j < blockIds.length; j++) {
utilitiesReloadBlock(blockIds[j], $sender, false, true);
}
} else if ($sender.attr('data-redirect-url')) {
window.location = $sender.attr('data-redirect-url');
}
} else {
for (var i = 0; i < json['errors'].length; i++) {
var error = json['errors'][i];
var errorMessage = error['message'];
if (errorMessage) {
$form.find('.generic-error').empty().html(errorMessage).fadeIn();
}
}
utilitiesScrollTo($('#' + blockId), 0);
}
};
}
$container.find('[data-action="select"]').each(function() {
$(this).click(function(e) {
if ($(this).hasClass('disabled')) {
return;
}
var $form = $(this).parents('form');
var $checkbox = $(this).find('input');
if (!$(e.target).is($checkbox)) {
$checkbox.prop('checked', !$checkbox.prop('checked'));
}
var selectedNumber = parseInt($form.attr('data-selected-cnt')) || 0;
if ($checkbox.prop('checked')) {
$(this).addClass('active');
selectedNumber++;
} else {
$(this).removeClass('active');
selectedNumber = Math.max(selectedNumber - 1, 0);
}
$form.find('input[data-mode="selection"]').prop('disabled', selectedNumber == 0);
$form.find('input[data-action="select_all"]').toggleClass('active', selectedNumber == $form.find('input[type=checkbox]').length - $form.find('input[type=checkbox][disabled]').length);
$form.attr('data-selected-cnt', selectedNumber);
});
});
$container.find('[data-action="choose"]').each(function() {
$(this).click(function() {
if ($(this).hasClass('disabled')) {
return;
}
var $form = $(this).parents('form');
var $radio = $(this).find('input');
$radio.prop('checked', true);
if ($radio.prop('checked')) {
$form.find('[data-action="choose"]').removeClass('active');
$(this).addClass('active');
}
});
});
$container.find('[data-action="delete"]').each(function() {
$(this).click(function(e) {
e.preventDefault();
if ($(this).hasClass('disabled')) {
return;
}
var $form = $(this).parents('form');
var $button = $(this);
var confirmText = $button.attr('data-confirm') || '';
if (!confirmText || confirm(confirmText)) {
var objectId = $button.attr('data-id');
if (!objectId) {
return;
}
var blockId = $form.attr('data-block-id');
var params = utilitiesParseParameters($form.attr('data-parameters'));
params['function'] = 'get_block';
params['block_id'] = blockId;
params['delete'] = [objectId];
utilitiesAjaxRequest($button, params, createDeleteCallback($form, $button, blockId));
}
});
});
$container.find('[data-action="delete_mixed"]').each(function() {
$(this).click(function(e) {
e.preventDefault();
if ($(this).hasClass('disabled')) {
return;
}
var $form = $(this).parents('form');
var $button = $(this);
var confirmText = $button.attr('data-confirm') || '';
if (!confirmText || confirm(confirmText)) {
var videoId = $button.attr('data-video-id');
var albumId = $button.attr('data-album-id');
if (!videoId && !albumId) {
return;
}
var blockId = $form.attr('data-block-id');
var params = utilitiesParseParameters($form.attr('data-parameters'));
params['function'] = 'get_block';
params['block_id'] = blockId;
if (videoId) {
params['delete_video_ids'] = [videoId];
} else if (albumId) {
params['delete_album_ids'] = [albumId];
}
utilitiesAjaxRequest($button, params, createDeleteCallback($form, $button, blockId));
}
});
});
$container.find('form[data-controls]').each(function () {
var $form = $(this);
var blockId = $form.attr('data-block-id');
$form.find('input[type="button"]').each(function() {
$(this).click(function(e) {
e.preventDefault();
var $button = $(this);
var confirmText = $button.attr('data-confirm') || '';
if (confirmText) {
confirmText = utilitiesCountFormat(confirmText, '%1%', parseInt($form.attr('data-selected-cnt')));
}
var params = {};
if (!confirmText || confirm(confirmText)) {
if ($button.attr('data-action') == 'select_all') {
if ($button.hasClass('active')) {
$form.find('input[type=checkbox]').each(function() {
if (this.checked) {
$(this).click();
}
});
} else {
$form.find('input[type=checkbox]').each(function() {
if (!this.checked) {
$(this).click();
}
});
}
} else if ($button.attr('data-action') == 'delete_multi') {
params = utilitiesParseParameters($form.attr('data-parameters'));
params['function'] = 'get_block';
params['block_id'] = blockId;
params['delete'] = [];
$form.find('input[type=checkbox]').each(function() {
if (this.checked) {
params['delete'].push(this.value);
}
});
utilitiesAjaxRequest($button, params, createDeleteCallback($form, $button, blockId));
} else if ($button.attr('data-action') == 'delete_mixed_multi') {
params = utilitiesParseParameters($form.attr('data-parameters'));
params['function'] = 'get_block';
params['block_id'] = blockId;
params['delete_video_ids'] = [];
params['delete_album_ids'] = [];
$form.find('input[type=checkbox]').each(function() {
if (this.checked) {
if (this.name == 'delete_video_ids[]') {
params['delete_video_ids'].push(this.value);
} else if (this.name == 'delete_album_ids[]') {
params['delete_album_ids'].push(this.value);
}
}
});
utilitiesAjaxRequest($button, params, createDeleteCallback($form, $button, blockId));
} else if ($button.attr('data-action') == 'move_multi') {
var playlistSelectorUrl = $button.attr('data-href');
if (playlistSelectorUrl) {
utilitiesAjaxFancyBox($button, playlistSelectorUrl, function () {
var $inner_form = this.inner.find('form');
utilitiesAjaxForm($inner_form, {
beforeSubmit: function($inner_form) {
$.fancybox.close();
var playlistId = parseInt($inner_form.find('[name="playlist_id"]:checked').val());
if (playlistId) {
params = utilitiesParseParameters($form.attr('data-parameters'));
params['function'] = 'get_block';
params['block_id'] = blockId;
params['move_to_playlist_id'] = playlistId;
params['delete'] = [];
$form.find('input[type=checkbox]').each(function() {
if (this.checked) {
params['delete'].push(this.value);
}
});
utilitiesAjaxRequest($button, params, createDeleteCallback($form, $button, blockId));
} else {
var createPlaylistUrl = $inner_form.attr('data-create-playlist-url');
if (createPlaylistUrl) {
utilitiesAjaxFancyBox($button, createPlaylistUrl, function () {
var $inner_form = this.inner.find('form');
utilitiesAjaxForm($inner_form, {
success: function($inner_form, newPlaylistData) {
$.fancybox.close();
newPlaylistData = $(newPlaylistData);
playlistId = newPlaylistData.attr('data-playlist-id');
if (playlistId) {
params = utilitiesParseParameters($form.attr('data-parameters'));
params['function'] = 'get_block';
params['block_id'] = blockId;
params['move_to_playlist_id'] = playlistId;
params['delete'] = [];
$form.find('input[type=checkbox]').each(function() {
if (this.checked) {
params['delete'].push(this.value);
}
});
utilitiesAjaxRequest($button, params, createDeleteCallback($form, $button, blockId));
}
}
});
});
}
}
return false;
}
});
});
}
} else if ($button.attr('data-action') == 'redirect') {
var redirectUrl = $button.attr('data-redirect-url');
if (!redirectUrl) {
return;
}
window.location = redirectUrl;
} else if ($button.attr('data-action') == 'delete_playlist') {
var playlistId = $button.attr('data-id');
if (!playlistId) {
return;
}
params['action'] = 'delete_playlists';
params['delete'] = [playlistId];
utilitiesAjaxRequest($button, params, createDeleteCallback($form, $button, blockId));
} else if ($button.attr('data-action') == 'delete_dvd') {
var dvdId = $button.attr('data-id');
if (!dvdId) {
return;
}
params['action'] = 'delete_dvds';
params['delete'] = [dvdId];
utilitiesAjaxRequest($button, params, createDeleteCallback($form, $button, blockId));
}
}
});
})
});
};
var initAjaxForms = function () {
$('[data-form="ajax"]').each(function () {
utilitiesAjaxForm($(this));
});
};
var initSubscriptions = function () {
var $btnSubscriptions = $('[data-subscribe-to], [data-unsubscribe-to]');
$btnSubscriptions.click(function(e) {
e.preventDefault();
var $btn = $(this);
if ($btn.hasClass('done')) {
return;
}
var subscriptionTo = $btn.attr('data-subscribe-to') || $btn.attr('data-unsubscribe-to');
var confirmation = $btn.attr('data-confirm');
var subscriptionId = $btn.attr('data-id');
if (subscriptionTo && subscriptionId) {
var params = {action: 'subscribe'};
if (!$btn.attr('data-subscribe-to')) {
params['action'] = 'unsubscribe';
}
if (subscriptionTo == 'category') {
params[params['action'] + '_category_id'] = subscriptionId;
} else if (subscriptionTo == 'model') {
params[params['action'] + '_model_id'] = subscriptionId;
} else if (subscriptionTo == 'content_source') {
params[params['action'] + '_cs_id'] = subscriptionId;
} else if (subscriptionTo == 'user') {
params[params['action'] + '_user_id'] = subscriptionId;
} else if (subscriptionTo == 'playlist') {
params[params['action'] + '_playlist_id'] = subscriptionId;
} else if (subscriptionTo == 'dvd') {
params[params['action'] + '_dvd_id'] = subscriptionId;
}
if (!confirmation || confirm(confirmation)) {
utilitiesAjaxRequest($btn, params, function (json) {
if (json['status'] == 'success') {
$btn.addClass('done');
var $buttonInfo = $btn.parents().first().find('.button-info');
if ($buttonInfo.exists()) {
if (params['action'] == 'subscribe') {
$buttonInfo.html(parseInt($buttonInfo.html()) + 1);
} else {
$buttonInfo.html(parseInt($buttonInfo.html()) - 1);
}
}
}
});
}
}
});
};
var initSearch = function () {
var selectedOptions, userId = '';
if (typeof(Storage) !== 'undefined') {
if (pageContext && pageContext['userId']) {
userId = pageContext['userId'] + ':';
}
selectedOptions = sessionStorage.getItem(userId + location.href + '#search_filter');
if (!selectedOptions) {
selectedOptions = sessionStorage.getItem(location.href + '#search_filter');
}
if (selectedOptions) {
selectedOptions = JSON.parse(selectedOptions);
for (var id in selectedOptions) {
$('#' + id).prop('checked', true);
}
if (!selectedOptions.search_string_filter) {
$('#search_string_filter').prop('checked', false);
}
} else {
selectedOptions = {search_string_filter: true};
}
}
if (typeof $.Autocomplete == 'function' && $.Autocomplete.defaults.serviceUrl) {
$('#search_form input[type="text"]').autocomplete({
paramName: 'q',
onSelect: function(suggestion) {
if (suggestion && suggestion.data && suggestion.data.url) {
window.location = suggestion.data.url;
}
}
});
}
$('#search_form').submit(function(e) {
try {
if (this['q'].value == '') {
this['q'].focus();
e.preventDefault();
return;
}
if ($(this).attr('data-url')) {
var value = this['q'].value.replace(/[-]/g, '[dash]').replace(/[ ]+/g, '-').replace(/[?]/g, '').replace(/[&]/g, '%26').replace(/[?]/g, '%3F').replace(/[/]/g, '%2F').replace(/\[dash]/g, '--');
window.location = $(this).attr('data-url').replace('%QUERY%', encodeURIComponent(value));
e.preventDefault();
}
} catch (e) {}
});
$('#search_form .search-button').click(function() {
$(this).submit();
});
$('[data-search-filter-ids] input, [data-search-filter-ids] button').click(function() {
var $container = $(this).parents('[data-search-filter-ids]');
if ($(this).prop('type') == 'button' || $(this).prop('tagName').toLowerCase() == 'button') {
$container.find('input[name*="[]"]').each(function () {
var $input = $(this);
$input.prop('checked', false);
if (selectedOptions) {
if ($input.attr('id')) {
if ($input.prop('checked')) {
selectedOptions[$input.attr('id')] = true;
} else {
delete selectedOptions[$input.attr('id')];
}
}
sessionStorage.setItem(userId + location.href + '#search_filter', JSON.stringify(selectedOptions));
}
});
} else {
if (selectedOptions) {
if ($(this).attr('id')) {
if ($(this).prop('checked')) {
selectedOptions[$(this).attr('id')] = true;
} else {
delete selectedOptions[$(this).attr('id')];
}
}
sessionStorage.setItem(userId + location.href + '#search_filter', JSON.stringify(selectedOptions));
}
}
var blockIds = $container.attr('data-search-filter-ids').split(',');
var params = {};
var paramGroups = {};
$container.find('input').each(function () {
var $input = $(this);
if ($input.prop('type') == 'hidden' || ($input.prop('type') == 'checkbox' && $input.prop('checked')) || ($input.prop('type') == 'radio' && $input.prop('checked'))) {
if ($input.prop('name').indexOf('[]') > 0) {
var paramName = $input.prop('name').replace('[]', '');
if ($input.attr('data-group-id')) {
var groupMap = paramGroups[paramName] || {};
var group = groupMap[$input.attr('data-group-id')] || [];
group.push($input.prop('value'));
groupMap[$input.attr('data-group-id')] = group;
paramGroups[paramName] = groupMap;
} else {
params[paramName] = $input.prop('value') + (params[paramName] ? ',' + params[paramName] : '');
}
} else {
params[$input.prop('name')] = $input.prop('value');
}
}
});
for (var groupName in paramGroups) {
if (paramGroups.hasOwnProperty(groupName)) {
var groupedArray = [];
for (var groupId in paramGroups[groupName]) {
if (paramGroups[groupName].hasOwnProperty(groupId)) {
groupedArray.push('(' + paramGroups[groupName][groupId].join(',') + ')');
}
}
params[groupName] = groupedArray.join('|');
}
}
for (var paramName in params) {
if (params.hasOwnProperty(paramName)) {
if (params[paramName] == 'all') {
delete params[paramName];
}
}
}
for (var i = 0; i < blockIds.length; i++) {
storage[blockIds[i]] = params;
utilitiesReloadBlock(blockIds[i], $container, false, true);
}
});
};
var initVideoUploadForm = function($uploadForms) {
if (!$uploadForms) {
$uploadForms = $('[data-form="ajax-upload"]');
}
$uploadForms.each(function () {
var $form = $(this);
var redirectUrl = $form.attr('data-redirect-url');
var continueForm = $form.attr('data-continue-form');
var lastPercent = 0;
var progressFunction = function(percent, uploadData) {
percent = Math.min(parseFloat(percent) || 0, 100);
if (percent > lastPercent) {
$form.addClass('uploading');
if (!$form.find('.progressbar').exists()) {
$form.append($('
'))
}
$form.find('.progressbar .progress').stop(true, true).animate({width: percent + '%'});
$form.find('.progressbar .text').html(parseInt(percent) + '%');
if (percent > 55) {
$form.find('.progressbar').addClass('half-done');
}
lastPercent = percent;
if (percent != 100 && continueForm) {
$('#' + continueForm).show();
}
}
if (uploadData && uploadData['filename']) {
$form.unblock().addClass('uploading-finished');
if (redirectUrl) {
window.location = redirectUrl.replace('%HASH%', uploadData['filename']);
} else if (continueForm) {
var $continueForm = $('#' + continueForm);
$continueForm.show();
$continueForm.find('input[type="submit"]').enable(true);
$continueForm.find('input[name="file"]').val(uploadData['filename'] + '.mp4');
$continueForm.find('input[name="file_hash"]').val(uploadData['filename']);
$continueForm.find('input[name="files"]').val(uploadData['filename']);
var $previewImage = $('[data-preview-src]');
if ($previewImage.exists()) {
$previewImage.attr('src', $previewImage.attr('data-preview-src').replace('%HASH%', uploadData['filename']));
}
var $previewInfo = $('[data-info-src]');
if ($previewInfo.exists()) {
if (uploadData['dimensions'] && uploadData['duration_string'] && uploadData['size_string']) {
$previewInfo.html($previewInfo.attr('data-info-src').replace('%1%', uploadData['dimensions'][0] + 'x' + uploadData['dimensions'][1]).replace('%2%', uploadData['duration_string']).replace('%3%', uploadData['size_string']));
}
if (uploadData['files_count'] && uploadData['files_size_string']) {
$previewInfo.html(utilitiesCountFormat(utilitiesCountFormat($previewInfo.attr('data-info-src').replace('%2%', uploadData['files_size_string']), '%1%', uploadData['files_count']), '%3%', uploadData['files_skipped']));
}
}
}
}
};
utilitiesAjaxForm($form, {
success: function($form, uploadData) {
progressFunction(100, uploadData);
},
beforeSerialize: function($form) {
var md5filename = '';
if ($form.find('[name="url"]').val() || $form.find('[name="content"]').val() || $form.find('[name="content[]"]').val() || $form.find('[name="upload_option"]:checked').val() == 'embed') {
for (var i = 0; i < 32; i++) {
md5filename += '' + Math.floor((Math.random() * 10));
}
$form.find('[name="filename"]').val(md5filename);
} else {
$form.find('[name="filename"]').val(md5filename);
}
},
beforeSubmit: function($form) {
lastPercent = 0;
var action = $form.find('[name="action"]').val();
var uploadType = $form.find('[name="upload_option"]:checked').val() || 'file';
var hash = $form.find('[name="filename"]').val();
var $fileInput, files;
if (action == 'upload_files') {
$fileInput = $form.find('[name="content[]"]');
files = [];
var totalsize = 0;
var filesLoaded = 0, sizeLoaded = 0;
$fileInput.each(function() {
for (var i = 0; i < this.files.length; i++) {
files.push(this.files[i]);
totalsize += this.files[i].size || 0;
}
});
var uploadSendFileFunction = function (index) {
if (index - 1 > filesLoaded || index - 1 > files.length) {
return;
}
var data = new FormData();
data.append('filename', hash);
data.append('files', files.length.toString());
data.append('index', index);
if (index > 0) {
data.append('content', files[index - 1]);
}
$.ajax({
type: 'POST',
url: $form.attr('action'),
xhr: function() {
var xhr = new window.XMLHttpRequest();
xhr.withCredentials = true;
xhr.upload.addEventListener('progress', function(event) {
if (event.lengthComputable) {
progressFunction((sizeLoaded + event.loaded) / totalsize * 100);
}
},false);
return xhr;
},
success: function (response) {
if (typeof response != 'object') {
response = JSON.parse(response);
}
if (response['status'] == 'success') {
if (index > 0) {
filesLoaded++;
sizeLoaded += files[index - 1].size || 0;
if (files.length > filesLoaded) {
progressFunction(sizeLoaded / totalsize * 100);
uploadSendFileFunction(filesLoaded + 1);
} else {
progressFunction(100);
uploadSendFileFunction(0);
}
} else {
progressFunction(100, response['data']);
}
} else {
$form.kvsProcessFormErrors(response).removeClass('uploading').unblock().find('.progressbar').hide().remove();
}
},
error: function (xhr) {
if (xhr.status == 0) {
setTimeout(function () {
uploadSendFileFunction(index);
}, 10 * 1000);
return;
}
$form.find('.generic-error').html(defaultErrorMessage).show();
$form.removeClass('uploading').unblock().find('.progressbar').hide().remove();
},
data: data,
processData: false,
contentType: false
});
};
setTimeout(function () {
$form.block({message: null});
uploadSendFileFunction(filesLoaded + 1);
}, 0);
return false;
} else if (action == 'upload_file') {
if (uploadType == 'file') {
$fileInput = $form.find('[name="content"]');
if ($fileInput.exists()) {
files = $fileInput.get(0).files;
if (files && files.length == 1) {
var chunkSize = 9 * 1024 * 1024;
if (pageContext && pageContext['upload_chunk_size']) {
chunkSize = parseInt(pageContext['upload_chunk_size']);
}
var filesize = files[0].size || 0;
var chunks = Math.floor(filesize / chunkSize);
var chunksLoaded = 0;
if (filesize % chunkSize > 0) {
chunks++;
}
var uploadSliceFunction = function (file, start, end) {
var slice = file['mozSlice'] ? file['mozSlice'] : (file['webkitSlice'] ? file['webkitSlice'] : (file['slice'] ? file['slice'] : function () {
}));
return slice.bind(file)(start, end);
};
var uploadSendChunkFunction = function (index) {
if (index - 1 > chunksLoaded) {
return;
}
var data = new FormData();
data.append('filename', hash);
data.append('upload_option', 'file');
data.append('chunks', chunks.toString());
data.append('index', index);
data.append('size', filesize.toString());
if (index > 0) {
data.append('content', uploadSliceFunction(files[0], (index - 1) * chunkSize, Math.min(index * chunkSize, filesize)));
}
$.ajax({
type: 'POST',
url: $form.attr('action'),
xhr: function() {
var xhr = new window.XMLHttpRequest();
xhr.withCredentials = true;
xhr.upload.addEventListener('progress', function(event) {
if (event.lengthComputable) {
progressFunction((chunkSize * chunksLoaded + event.loaded) / filesize * 100);
}
},false);
return xhr;
},
success: function (response) {
if (typeof response != 'object') {
response = JSON.parse(response);
}
if (response['status'] == 'success') {
if (index > 0) {
chunksLoaded++;
if (chunks > chunksLoaded) {
progressFunction((chunkSize * chunksLoaded) / filesize * 100);
uploadSendChunkFunction(chunksLoaded + 1);
} else {
progressFunction(100);
uploadSendChunkFunction(0);
}
} else {
progressFunction(100, response['data']);
}
} else {
$form.kvsProcessFormErrors(response).removeClass('uploading').unblock().find('.progressbar').hide().remove();
}
},
error: function (xhr) {
if (xhr.status == 0) {
setTimeout(function () {
uploadSendChunkFunction(index);
}, 10 * 1000);
return;
}
$form.find('.generic-error').html(defaultErrorMessage).show();
$form.removeClass('uploading').unblock().find('.progressbar').hide().remove();
},
data: data,
processData: false,
contentType: false
});
};
setTimeout(function () {
$form.block({message: null});
uploadSendChunkFunction(chunksLoaded + 1);
}, 0);
return false;
}
}
} else if (uploadType == 'url') {
var $urlInput = $form.find('[name="url"]');
if ($urlInput.exists()) {
var url = $urlInput.val();
if (url) {
var uploadSendUrlFunction = function () {
$.ajax({
type: 'POST',
url: $form.attr('action'),
xhrFields: {
withCredentials: true
},
success: function (response) {
if (typeof response != 'object') {
response = JSON.parse(response);
}
if (response['status'] == 'success') {
if (response['data']['state'] == 'uploading') {
progressFunction(response['data']['percent'], response['data']);
setTimeout(uploadSendUrlFunction, 1000);
} else {
progressFunction(100, response['data']);
}
} else {
$form.kvsProcessFormErrors(response).removeClass('uploading').unblock().find('.progressbar').hide().remove();
}
},
error: function (xhr) {
if (xhr.status == 0) {
setTimeout(function () {
uploadSendUrlFunction();
}, 10 * 1000);
return;
}
$form.find('.generic-error').html(defaultErrorMessage).show();
$form.removeClass('uploading').unblock().find('.progressbar').hide().remove();
},
data: {
upload_option: 'url',
filename: hash,
url: url,
upload_v2: 'true'
}
});
};
setTimeout(function () {
$form.block({message: null});
uploadSendUrlFunction();
}, 0);
return false;
}
}
}
}
return true;
}
}, true);
$form.find('[name="upload_option"]').change(function() {
var $radio = $(this);
if ($radio.prop('checked')) {
var disabledProp = 'disabled';
if ($radio.val() == 'file') {
$form.find('[name="content"]').parents('.file-control').find('input').removeAttr(disabledProp).click();
$form.find('[name="url"]').attr(disabledProp, disabledProp).val('').change();
$form.find('[name="embed"]').attr(disabledProp, disabledProp).val('').change().parents('.row').find('label').removeClass('required');
$form.find('[name="duration"]').attr(disabledProp, disabledProp).val('').change().parents('.row').find('label').removeClass('required');
$form.find('[name="screenshot"]').parents('.file-control').find('input').attr(disabledProp, disabledProp).val('').change().parents('.row').find('label').removeClass('required');
} else if ($radio.val() == 'url') {
$form.find('[name="content"]').parents('.file-control').find('input').attr(disabledProp, disabledProp).val('').change();
$form.find('[name="url"]').removeAttr(disabledProp).focus();
$form.find('[name="embed"]').attr(disabledProp, disabledProp).val('').change().parents('.row').find('label').removeClass('required');
$form.find('[name="duration"]').attr(disabledProp, disabledProp).val('').change().parents('.row').find('label').removeClass('required');
$form.find('[name="screenshot"]').parents('.file-control').find('input').attr(disabledProp, disabledProp).val('').change().parents('.row').find('label').removeClass('required');
} else if ($radio.val() == 'embed') {
$form.find('[name="url"]').attr(disabledProp, disabledProp).val('').change();
$form.find('[name="content"]').parents('.file-control').find('input').attr(disabledProp, disabledProp).val('').change();
$form.find('[name="embed"]').removeAttr(disabledProp).focus().parents('.row').find('label').addClass('required');
$form.find('[name="duration"]').removeAttr(disabledProp).parents('.row').find('label').addClass('required');
$form.find('[name="screenshot"]').parents('.file-control').find('input').removeAttr(disabledProp).parents('.row').find('label').addClass('required');
}
}
});
var params = {mode: 'async', format: 'json', action: $form.find('[name="action"]').val()};
$form.attr('action', ($form.attr('action') || '') + (($form.attr('action') || '').indexOf('?') >=0 ? '&' : '?') + $.param(params));
});
};
var initProfile = function() {
$('[data-action="message"],[data-action="add_to_friends"]').click(function(e) {
e.preventDefault();
var $btn = $(this);
if ($btn.hasClass('done')) {
return;
}
var popupClass = '.popup-send-message';
if ($btn.attr('data-action') == 'add_to_friends') {
popupClass = '.popup-add-to-friends';
}
$.fancybox($(popupClass).clone(true, true), {
afterShow: function () {
var $form = this.inner.find('form');
utilitiesAjaxForm($form, {
success: function() {
$btn.addClass('done');
$.fancybox.close();
if ($btn.attr('data-action') == 'add_to_friends') {
window.location.reload();
}
}
});
utilitiesLoadSmileys(this.inner);
},
helpers: {
overlay: {closeClick: false}
},
topRatio: 0.3
});
});
};
var initMessages = function () {
var $messageForm = $('#send_message_form');
if ($messageForm.exists()) {
utilitiesLoadSmileys($messageForm);
utilitiesAjaxForm($messageForm, {
success: function($form, newMessageData) {
var editing = false;
if ($form.find('[name="message_id"]').val() == newMessageData['message_id']) {
editing = true;
}
$form.get(0).reset();
$form.find('[name="message_id"]').val('');
$form.find('[name="files_time"]').val('');
$('#previewContainer').hide();
$('#previewContainer .preview').remove();
var messagesBlockId = $form.attr('data-block-id');
var $messagesList = $('.list-messages');
if (newMessageData && messagesBlockId && $messagesList.exists()) {
var args = {
success: function(sender, html) {
var resultElement = document.createElement('DIV');
resultElement.innerHTML = html;
if (editing) {
$messagesList.find('.item[data-message-id="' + newMessageData['message_id'] + '"]').replaceWith($(resultElement).find('.item[data-message-id="' + newMessageData['message_id'] + '"]'));
} else {
var $newItem = $(resultElement).find('.item[data-message-id="' + newMessageData['message_id'] + '"]').addClass('hidden');
$messagesList.find('#' + messagesBlockId + '_items').append($newItem);
setTimeout(function() {
$('#send_message_message').html('');
$('.dialogue-empty').hide();
$('#about').show();
$messagesList.show();
$newItem.fadeIn();
setTimeout(function() {
var $newText = $('.block-message').find('.item[data-message-id="' + newMessageData['message_id'] + '"] .text p').html();
$('.users-list .js-ajax-chat.active .message .text').html($newText);
$('.answer_messeg').removeClass('show');
$('#parent_message_id').attr('value',0)
var height = 0;
$('.block-message').each(function (i, elem) {
height = height + $(this).height()
});
var widthHeader = $('.header').width();
if (widthHeader > 767) {
// $(".dialogues-holder .dialogue-holder .nano").nanoScroller({scrollTop: height});
$(".dialogues-holder .dialogue-holder .nano").nanoScroller({
// scroll: 'top'
scroll: 'bottom',
iOSNativeScrolling: true,
alwaysVisible: true
});
} else {
window.scrollTo(0,document.body.scrollHeight);
}
initOverlayScroll();
initGallerysMessages();
}, 200);
}, 200);
}
}
};
utilitiesGetBlock(messagesBlockId, null, args);
}
}
});
}
$('[data-action="delete_conversation"], [data-action="ignore_conversation"]').click(function(e) {
e.preventDefault();
var $button = $(this);
var confirmText = $button.attr('data-confirm') || '';
if (!confirmText || confirm(confirmText)) {
var userId = $button.attr('data-user-id');
if (!userId) {
return;
}
var blockId = $button.attr('data-block-id');
var params = {};
params['function'] = 'get_block';
params['block_id'] = blockId;
params['action'] = $button.attr('data-action');
params['conversation_user_id'] = userId;
utilitiesAjaxRequest($button, params, function(json) {
if (json['status'] == 'success') {
// window.location.reload();
$('.js-ajax-chat.active').click();
}
});
}
});
$(document).on('click', '.list-messages [data-edit-message-id]', function(e) {
e.preventDefault();
var $button = $(this);
var messageId = $button.attr('data-edit-message-id');
if (!messageId) {
return;
}
var $form = $('#send_message_form');
if ($form.find('[name="message_id"]').val()) {
return;
}
$form.find('[name="message_id"]').val(messageId);
utilitiesScrollTo($form);
var $item = $button.parents('.item[data-message-id="' + messageId + '"]');
$item.addClass('editing');
var originalText = $item.find('.original-text').html() || '';
originalText = originalText.replace(/ /gi, '\n').replace(/>/gi, '>').replace(/</gi, '<').replace(/"/gi, '"');
originalText = originalText.replace(//gi, '$1');
originalText = originalText.trim();
$form.find('[name="message"]').val(originalText).focus();
});
};
var initStats = function() {
var sendStatsReq = function(action) {
var statsUrl = window.location.href;
if (statsUrl.indexOf('#') > 0) {
statsUrl = statsUrl.substring(0, statsUrl.indexOf('#'));
}
if (statsUrl.indexOf('?') >= 0) {
statsUrl += '&';
} else {
statsUrl += '?';
}
if (action == 'js_stats' && pageContext) {
if (pageContext['disableStats']) {
return;
}
if (pageContext['videoId']) {
statsUrl += 'video_id=' + pageContext['videoId'] + '&';
}
if (pageContext['albumId']) {
statsUrl += 'album_id=' + pageContext['albumId'] + '&';
}
}
var img = new Image();
img.src = statsUrl + 'mode=async&action=' + action + '&rand=' + new Date().getTime();
};
$.cookie('kt_tcookie', '1', {expires: 7, path: '/', samesite: 'Lax'});
if ($.cookie('kt_tcookie') == '1') {
sendStatsReq('js_stats');
}
if (pageContext && pageContext['userId']) {
var reporter = function() {
sendStatsReq('js_online_status');
};
reporter();
setInterval(reporter, 60 * 1000);
}
};
var initAutoscroll = function() {
var $autoscroll = $('[data-autoscroll="true"]');
if ($autoscroll.exists()) {
utilitiesScrollTo($autoscroll.first());
}
};
var initRecaptcha = function() {
$(document).on('recaptchaloaded', function() {
recaptchaLoaded = true;
utilitiesRecaptcha();
});
};
function initMessagesForm() {
const $commentMessage = $('#send_message_message');
const $smileysBar = $('.smileys-bar');
// Обработчик клика на смайлики
$smileysBar.on('click', 'img', function () {
// Фокусируемся на поле и вставляем смайлик
$commentMessage.focus();
insertEmojiAtCursor($(this).attr('src'),$(this).attr('alt'));
});
function insertEmojiAtCursor(imageSrc,alt) {
const img = $('', {
src: imageSrc
});
const selection = window.getSelection();
// Проверяем, что выделение находится внутри #send_message_message
if (!selection.rangeCount || !isSelectionInsideCommentMessage(selection)) {
// Если нет выделения или оно вне блока, то ставим курсор в конец блока
const range = document.createRange();
range.selectNodeContents($commentMessage[0]); // Выбираем содержимое блока
range.collapse(false); // Устанавливаем курсор в конец содержимого
selection.removeAllRanges();
selection.addRange(range);
}
const range = selection.getRangeAt(0);
// Удаляем текущий выделенный контент (если есть)
range.deleteContents();
// Вставляем картинку смайлика
range.insertNode(img[0]);
// Устанавливаем курсор после вставленного изображения
range.setStartAfter(img[0]);
selection.removeAllRanges();
selection.addRange(range);
}
// Функция для проверки, находится ли выделение внутри #send_message_message
function isSelectionInsideCommentMessage(selection) {
let node = selection.anchorNode;
while (node) {
if (node === $commentMessage[0]) {
return true;
}
node = node.parentNode;
}
return false;
}
// Обработчик фокуса для поля ввода
$commentMessage.on('focus', function () {
// Если текстовое поле пустое, можно добавить или удалить текст, placeholder и т.д.
initOverlayScroll();
if (!$(this).text().trim()) {
// Пример добавления логики при необходимости
// $(this).text('');
}
});
// Обработчик потери фокуса для поля ввода
$commentMessage.on('blur', function () {
// Если текстовое поле пустое, можно добавить placeholder
if (!$(this).text().trim()) {
// Пример добавления логики при необходимости
// $(this).text('Введите сообщение...');
}
});
var typing_timer;
var typing_timer1;
var isTyping = false;
$commentMessage.on('input', function () {
// if (!isTyping) {
// isTyping = true;
// startSendingAjax();
// }
// clearTimeout(typing_timer1);
// typing_timer1 = setTimeout(stopSendingAjax, 1000);
});
function startSendingAjax() {
typing_timer = setInterval(function () {
var reply_to_user_id = $('[name="reply_to_user_id"]').val();
utilitiesAjaxRequest('', {action: 'input_messages', reply_to_user_id: reply_to_user_id, function: 'get_block', block_id: 'custom_list_messages_my_conversation_messages_new'}, function(json) {
if (json['status']=='success') {
}
});
}, 1000);
}
function stopSendingAjax() {
clearInterval(typing_timer);
var reply_to_user_id = $('[name="reply_to_user_id"]').val();
utilitiesAjaxRequest('', {action: 'stop_messages', reply_to_user_id: reply_to_user_id, function: 'get_block', block_id: 'custom_list_messages_my_conversation_messages_new'}, function(json) {
if (json['status']=='success') {
}
});
isTyping = false;
}
function replaceSmileys(text) {
for (let [imgTag, smiley] of Object.entries($smileys_bar)) {
// Заменяем HTML-тег на текстовый смайл
const regex = new RegExp(imgTag.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'), 'g'); // Экранирование спецсимволов
text = text.replace(regex, smiley);
}
return text;
}
let lastContent = '';
if ($commentMessage.length) setInterval(() => {
const currentContent = $commentMessage.html().trim();
if (currentContent !== lastContent) {
let $text = currentContent.replace(/<\/div>