function nextgen_lightbox_filter_selector($, selector){
if(nextgen_lightbox_settings&&nextgen_lightbox_settings.context){
var context=nextgen_lightbox_settings.context;
if(context=='all_images'){
selector=selector.add($('a > img').parent());
}
else if(context=='all_images_direct'){
selector=selector.add($('a[href] > img').parent()
.filter(function(){
var href=$(this).attr('href').toLowerCase();
var ext=href.substring(href.length - 3);
var ext2=href.substring(href.length - 4);
return (ext=='jpg'||ext=='gif'||ext=='png'||ext2=='tiff'||ext2=='jpeg'||ext2=='webp');
}));
}
else if(context=='nextgen_and_wp_images'){
selector=selector.add($('a > img[class*="wp-image-"]').parent());
}
selector=selector.not('.gallery_link');
selector=selector.not('.use_imagebrowser_effect');
}
return selector;
};
(function($){
"use strict";
window.NextGEN_TikTok={
extract_id: function(url){
if(!url) return null;
url=url.trim();
var patterns=[
/tiktok\.com\/@[^\/]+\/video\/(\d+)/i,
/tiktok\.com\/v\/(\d+)/i,
/tiktok\.com\/embed\/v2\/(\d+)/i,
/tiktok\.com\/.*[?&]v=(\d+)/i,
/\/video\/(\d+)/i,
/^(\d{15,25})$/,
];
for (var i=0; i < patterns.length; i++){
var match=url.match(patterns[i]);
if(match&&match[1]){
return match[1];
}}
if(url.match(/vm\.tiktok\.com|tiktok\.com\/t\//i)){
var idMatch=url.match(/(\d{15,25})/);
if(idMatch){
return idMatch[1];
}
return null;
}
return null;
},
create_player: function(videoUrl, containerClass, videoClass){
var container=document.createElement("div");
container.className=containerClass||"ngg-tiktok-container";
var video=document.createElement("video");
video.className=videoClass||"ngg-tiktok-video";
video.controls=true;
video.autoplay=true;
video.playsInline=true;
video.muted=true;
video.loop=true;
video.preload="auto";
video.setAttribute("playsinline", "");
video.setAttribute("webkit-playsinline", "");
video.src=videoUrl;
video.addEventListener("loadedmetadata", function (){
var naturalWidth=video.videoWidth;
var naturalHeight=video.videoHeight;
if(naturalWidth&&naturalHeight){
var container=video.closest('.ngg-tiktok-container');
var displayWidth=naturalWidth;
var displayHeight=naturalHeight;
if(container){
var fancyboxContent=container.closest('#fancybox-content');
var tbWindow=container.closest('#TB_window');
var slImage=container.closest('.sl-image');
var shWrap=container.closest('#shWrap');
if(shWrap){
var wiH=window.innerHeight||0;
var dbH=document.body.clientHeight||0;
var deH=document.documentElement ? document.documentElement.clientHeight:0;
var wHeight;
if(wiH > 0){
wHeight=((wiH - dbH) > 1&&(wiH - dbH) < 30) ? dbH:wiH;
wHeight=((wHeight - deH) > 1&&(wHeight - deH) < 30) ? deH:wHeight;
}else{
wHeight=(deH > 0) ? deH:dbH;
}
if(document.getElementsByTagName("body")[0].className.match(/admin-bar/)
&& document.getElementById('wpadminbar')!==null){
wHeight=wHeight - document.getElementById('wpadminbar').offsetHeight;
}
var shHeight=wHeight - 50;
var deW=document.documentElement ? document.documentElement.clientWidth:0;
var dbW=window.innerWidth||document.body.clientWidth;
var wWidth=(deW > 1) ? deW:dbW;
if(displayHeight > shHeight){
displayWidth=displayWidth * (shHeight / displayHeight);
displayHeight=shHeight;
}
if(displayWidth > (wWidth - 16)){
displayHeight=displayHeight * ((wWidth - 16) / displayWidth);
displayWidth=wWidth - 16;
}
video.style.width=displayWidth + "px";
video.style.height=displayHeight + "px";
video.style.maxWidth="none";
video.style.maxHeight="none";
video.setAttribute("width", displayWidth);
video.setAttribute("height", displayHeight);
}else if(fancyboxContent){
setTimeout(function(){
var contentRect=fancyboxContent.getBoundingClientRect();
if(contentRect.width > 10&&contentRect.height > 10){
var maxW=contentRect.width;
var maxH=contentRect.height;
if(displayWidth > maxW||displayHeight > maxH){
var ratio=displayWidth / displayHeight > maxW / maxH
? displayWidth / maxW
: displayHeight / maxH;
displayWidth=displayWidth / ratio;
displayHeight=displayHeight / ratio;
}
video.style.width=displayWidth + "px";
video.style.height=displayHeight + "px";
video.setAttribute("width", displayWidth);
video.setAttribute("height", displayHeight);
}}, 50);
return;
}else if(tbWindow){
var pageWidth=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth;
var pageHeight=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight;
var x=pageWidth - 150;
var y=pageHeight - 150;
if(displayWidth > x){
displayHeight=displayHeight * (x / displayWidth);
displayWidth=x;
if(displayHeight > y){
displayWidth=displayWidth * (y / displayHeight);
displayHeight=y;
}}else if(displayHeight > y){
displayWidth=displayWidth * (y / displayHeight);
displayHeight=y;
if(displayWidth > x){
displayHeight=displayHeight * (x / displayWidth);
displayWidth=x;
}}
video.style.width=displayWidth + "px";
video.style.height=displayHeight + "px";
video.setAttribute("width", displayWidth);
video.setAttribute("height", displayHeight);
}else if(slImage){
var widthRatio=0.8;
var heightRatio=0.9;
var windowWidth=window.innerWidth;
var windowHeight=window.innerHeight;
var maxWidth=windowWidth * widthRatio;
var maxHeight=windowHeight * heightRatio;
if(displayWidth > maxWidth||displayHeight > maxHeight){
var ratio=displayWidth / displayHeight > maxWidth / maxHeight
? displayWidth / maxWidth
: displayHeight / maxHeight;
displayWidth /=ratio;
displayHeight /=ratio;
}
video.style.width=displayWidth + "px";
video.style.height=displayHeight + "px";
video.style.maxWidth=maxWidth + "px";
video.style.maxHeight=maxHeight + "px";
}}
}});
video.addEventListener("canplay", function (){
video.play().catch(function (){});
});
container.appendChild(video);
return container;
},
handle_content: function(options){
var self=this;
var playUrl=options.playUrl;
var $targetContainer=$(options.container);
if(!playUrl) return null;
var tiktokContent=null;
var applyDimensions=function (el){
if(options.width){
var w=typeof options.width==="number" ? options.width + "px":options.width;
el.style.width=w;
var inner=el.querySelector("video, iframe, .ngg-tiktok-error-content");
if(inner) inner.style.width="100%";
}
if(options.height){
var h=typeof options.height==="number" ? options.height + "px":options.height;
el.style.height=h;
var inner=el.querySelector("video, iframe, .ngg-tiktok-error-content");
if(inner) inner.style.height="100%";
}};
if(playUrl){
var decodedUrl=playUrl;
try {
decodedUrl=decodeURIComponent(playUrl);
} catch (e){}
tiktokContent=self.create_player(decodedUrl, options.containerClass, options.videoClass);
if(tiktokContent){
applyDimensions(tiktokContent);
var video=tiktokContent.querySelector("video");
if(video){
video.onerror=function (){
$(tiktokContent).remove();
var errorMsg=self.create_error("Video failed to load", options.errorClass);
applyDimensions(errorMsg);
if(typeof options.onBeforeAppend==="function") options.onBeforeAppend(errorMsg);
$targetContainer.append(errorMsg);
};}
if(typeof options.onBeforeAppend==="function") options.onBeforeAppend(tiktokContent);
$targetContainer.append(tiktokContent);
}}else{
var errorMsg=self.create_error("Video not available", options.errorClass);
applyDimensions(errorMsg);
if(typeof options.onBeforeAppend==="function") options.onBeforeAppend(errorMsg);
$targetContainer.append(errorMsg);
tiktokContent=errorMsg;
}
return tiktokContent;
},
create_error: function(message, containerClass){
var container=document.createElement("div");
container.className=containerClass||"ngg-tiktok-error";
container.innerHTML =
'<div class="ngg-tiktok-error-content">' +
'<span class="ngg-tiktok-error-icon">&#9888;</span>' +
'<span class="ngg-tiktok-error-text">' +
(message||"Video failed to load") +
"</span>" +
"</div>";
return container;
}};})(jQuery);
(function($){
"use strict";
var DEBUG=false;
var initialized=false;
var log=function(){
if(DEBUG&&window.console){
console.log.apply(console, ['[NGG Custom Lightbox TikTok]'].concat(Array.prototype.slice.call(arguments)));
}};
var getTikTokData=function($anchor){
var playUrl=$anchor.attr('data-tiktok-play-url');
var shareUrl=$anchor.attr('data-tiktok-share-url');
var embedUrl=$anchor.attr('data-tiktok-embed-url');
if(playUrl||shareUrl||embedUrl){
return {
playUrl: playUrl||'',
shareUrl: shareUrl||'',
embedUrl: embedUrl||''
};}
var imageId=$anchor.attr('data-image-id');
if(imageId&&window.ngg_tiktok_images&&window.ngg_tiktok_images[imageId]){
return window.ngg_tiktok_images[imageId];
}
return null;
};
var getVideoUrl=function($anchor){
return $anchor.attr('data-video-url')||null;
};
var getGalleryId=function($element){
var $galleryContainer=$element.closest('[data-gallery-id]');
if($galleryContainer.length){
return $galleryContainer.attr('data-gallery-id')||$galleryContainer.data('gallery-id');
}
$galleryContainer=$element.closest('.ngg-galleryoverview, .ngg-imagebrowser, .ngg-slideshow');
if($galleryContainer.length){
return $galleryContainer.attr('data-gallery-id') ||
$galleryContainer.data('gallery-id') ||
$galleryContainer.attr('data-nextgen-gallery-id') ||
$galleryContainer.data('nextgen-gallery-id');
}
return null;
};
var getTikTokSettings=function(galleryId){
if(window.NggTikTokVideo&&typeof window.NggTikTokVideo.getTikTokSettings==='function'){
return window.NggTikTokVideo.getTikTokSettings(galleryId);
}
if(window.ngg_tiktok_gallery_settings){
if(galleryId&&window.ngg_tiktok_gallery_settings['gallery_' + galleryId]){
return window.ngg_tiktok_gallery_settings['gallery_' + galleryId];
}
if(window.ngg_tiktok_gallery_settings.global){
return window.ngg_tiktok_gallery_settings.global;
}}
return { link: '0', link_target: '0' };};
var getVideoSettings=function(galleryId){
if(!window.ngg_video_gallery_settings){
return {
show_video_controls: true,
show_play_pause_controls: true,
autoplay_videos: false
};}
var settings=window.ngg_video_gallery_settings;
var galleryIdStr=galleryId ? String(galleryId):null;
if(galleryIdStr&&settings['gallery_' + galleryIdStr]){
return settings['gallery_' + galleryIdStr];
}
return settings.global||{
show_video_controls: true,
show_play_pause_controls: true,
autoplay_videos: false
};};
var showOverlay=function(contentElement){
$('#ngg-custom-lightbox-overlay').remove();
var $overlay=$('<div id="ngg-custom-lightbox-overlay"></div>').css({
position: 'fixed',
top: 0,
left: 0,
width: '100%',
height: '100%',
backgroundColor: 'transparent',
zIndex: 999999,
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
cursor: 'pointer'
});
var $closeBtn=$('<button type="button" class="ngg-custom-lightbox-close">&times;</button>').css({
position: 'absolute',
top: '20px',
right: '20px',
background: 'transparent',
border: 'none',
color: '#fff',
fontSize: '40px',
cursor: 'pointer',
zIndex: 1000000,
padding: '10px',
lineHeight: 1
});
var $content=$('<div class="ngg-custom-lightbox-content"></div>').css({
position: 'relative',
maxWidth: '90vw',
maxHeight: '90vh',
display: 'flex',
alignItems: 'center',
justifyContent: 'center'
});
$content.append(contentElement);
$overlay.append($closeBtn).append($content);
var closeOverlay=function(){
var $video=$overlay.find('video');
if($video.length){
$video[0].pause();
$video.attr('src', '');
}
var $iframe=$overlay.find('iframe');
if($iframe.length){
$iframe.attr('src', '');
}
$overlay.remove();
};
$closeBtn.on('click', function(e){
e.stopPropagation();
closeOverlay();
});
$overlay.on('click', function(e){
if(e.target===this){
closeOverlay();
}});
$(document).on('keydown.nggCustomLightbox', function(e){
if(e.keyCode===27){
closeOverlay();
$(document).off('keydown.nggCustomLightbox');
}});
$('body').append($overlay);
return $overlay;
};
var handleTikTokClick=function($anchor, tiktokData){
log('Handling TikTok click', tiktokData);
if(!tiktokData.playUrl&&!tiktokData.shareUrl){
return false;
}
var $container=$('<div class="ngg-tiktok-container"></div>').css({
position: 'relative',
display: 'flex',
alignItems: 'center',
justifyContent: 'center'
});
if(window.NextGEN_TikTok&&window.NextGEN_TikTok.handle_content){
window.NextGEN_TikTok.handle_content({
playUrl: tiktokData.playUrl,
shareUrl: tiktokData.shareUrl,
container: $container
});
showOverlay($container);
return true;
}
if(tiktokData.playUrl){
var $video=$('<video></video>').attr({
src: tiktokData.playUrl,
controls: true,
autoplay: true,
playsinline: true,
muted: true,
loop: true
}).css({
maxWidth: '90vw',
maxHeight: '90vh',
width: 'auto',
height: 'auto'
});
$container.append($video);
showOverlay($container);
$video.on('click', function(){
this.muted=false;
});
return true;
}
return false;
};
var handleVideoClick=function($anchor, videoUrl, galleryId){
log('Handling video click', videoUrl);
if(!videoUrl){
return false;
}
if(!window.NextGEN_Video||!window.NextGEN_Video.detect_platform(videoUrl)){
return false;
}
var videoSettings=getVideoSettings(galleryId);
var $container=$('<div class="ngg-video-container"></div>').css({
position: 'relative',
display: 'flex',
alignItems: 'center',
justifyContent: 'center'
});
if(window.NextGEN_Video.handle_content){
window.NextGEN_Video.handle_content({
videoUrl: videoUrl,
container: $container[0],
settings: videoSettings,
containerClass: 'ngg-video-container',
videoClass: 'ngg-video-player',
errorClass: 'ngg-video-error'
});
showOverlay($container);
return true;
}
return false;
};
var handleClick=function(e){
var $target=$(e.target);
var $anchor=$target.is('a') ? $target:$target.closest('a');
if(!$anchor.length){
return;
}
if(!$anchor.attr('data-image-id')){
return;
}
var tiktokData=getTikTokData($anchor);
var videoUrl=getVideoUrl($anchor);
var galleryId=getGalleryId($anchor);
if(tiktokData&&(tiktokData.playUrl||tiktokData.shareUrl)){
var tiktokSettings=getTikTokSettings(galleryId);
var linkSetting=String(tiktokSettings.link||'0');
if(linkSetting==='1'||linkSetting==='2'){
return;
}
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
handleTikTokClick($anchor, tiktokData);
return;
}
if(videoUrl&&window.NextGEN_Video&&window.NextGEN_Video.detect_platform(videoUrl)){
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
handleVideoClick($anchor, videoUrl, galleryId);
return;
}};
var init=function(){
if(initialized){
return;
}
initialized=true;
log('Initializing custom lightbox TikTok/video handler');
document.addEventListener('click', handleClick, true);
};
$(function(){
init();
});
$(window).on('refreshed', function(){
log('Refreshed event - reinitializing');
});
window.NggCustomLightboxTikTok={
showOverlay: showOverlay,
handleTikTokClick: handleTikTokClick,
handleVideoClick: handleVideoClick
};})(jQuery);