| Server IP : 14.225.204.176 / Your IP : 216.73.216.169 Web Server : nginx/1.24.0 System : Linux nodejs-ybgk 6.8.0-40-generic #40-Ubuntu SMP PREEMPT_DYNAMIC Fri Jul 5 10:34:03 UTC 2024 x86_64 User : root ( 0) PHP Version : 8.1.34 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /var/www/html/php/zinisoft.net-react/node_modules/jarallax/src/ |
Upload File : |
import VideoWorker from 'video-worker';
import global from 'global';
export default function jarallaxVideo( jarallax = global.jarallax ) {
if ( 'undefined' === typeof jarallax ) {
return;
}
const Jarallax = jarallax.constructor;
// append video after when block will be visible.
const defOnScroll = Jarallax.prototype.onScroll;
Jarallax.prototype.onScroll = function() {
const self = this;
defOnScroll.apply( self );
const isReady = ! self.isVideoInserted
&& self.video
&& ( ! self.options.videoLazyLoading || self.isElementInViewport )
&& ! self.options.disableVideo();
if ( isReady ) {
self.isVideoInserted = true;
self.video.getVideo( ( video ) => {
const $parent = video.parentNode;
self.css( video, {
position: self.image.position,
top: '0px',
left: '0px',
right: '0px',
bottom: '0px',
width: '100%',
height: '100%',
maxWidth: 'none',
maxHeight: 'none',
pointerEvents: 'none',
transformStyle: 'preserve-3d',
backfaceVisibility: 'hidden',
willChange: 'transform,opacity',
margin: 0,
zIndex: -1,
} );
self.$video = video;
// add Poster attribute to self-hosted video
if ( 'local' === self.video.type ) {
if ( self.image.src ) {
self.$video.setAttribute( 'poster', self.image.src );
} else if ( self.image.$item && 'IMG' === self.image.$item.tagName && self.image.$item.src ) {
self.$video.setAttribute( 'poster', self.image.$item.src );
}
}
// insert video tag
self.image.$container.appendChild( video );
// remove parent video element (created by VideoWorker)
$parent.parentNode.removeChild( $parent );
} );
}
};
// cover video
const defCoverImage = Jarallax.prototype.coverImage;
Jarallax.prototype.coverImage = function() {
const self = this;
const imageData = defCoverImage.apply( self );
const node = self.image.$item ? self.image.$item.nodeName : false;
if ( imageData && self.video && node && ( 'IFRAME' === node || 'VIDEO' === node ) ) {
let h = imageData.image.height;
let w = ( h * self.image.width ) / self.image.height;
let ml = ( imageData.container.width - w ) / 2;
let mt = imageData.image.marginTop;
if ( imageData.container.width > w ) {
w = imageData.container.width;
h = ( w * self.image.height ) / self.image.width;
ml = 0;
mt += ( imageData.image.height - h ) / 2;
}
// add video height over than need to hide controls
if ( 'IFRAME' === node ) {
h += 400;
mt -= 200;
}
self.css( self.$video, {
width: `${ w }px`,
marginLeft: `${ ml }px`,
height: `${ h }px`,
marginTop: `${ mt }px`,
} );
}
return imageData;
};
// init video
const defInitImg = Jarallax.prototype.initImg;
Jarallax.prototype.initImg = function() {
const self = this;
const defaultResult = defInitImg.apply( self );
if ( ! self.options.videoSrc ) {
self.options.videoSrc = self.$item.getAttribute( 'data-jarallax-video' ) || null;
}
if ( self.options.videoSrc ) {
self.defaultInitImgResult = defaultResult;
return true;
}
return defaultResult;
};
const defCanInitParallax = Jarallax.prototype.canInitParallax;
Jarallax.prototype.canInitParallax = function() {
const self = this;
let defaultResult = defCanInitParallax.apply( self );
if ( ! self.options.videoSrc ) {
return defaultResult;
}
// Init video api
const video = new VideoWorker( self.options.videoSrc, {
autoplay: true,
loop: self.options.videoLoop,
showControls: false,
accessibilityHidden: true,
startTime: self.options.videoStartTime || 0,
endTime: self.options.videoEndTime || 0,
mute: self.options.videoVolume ? 0 : 1,
volume: self.options.videoVolume || 0,
} );
function resetDefaultImage() {
if ( self.image.$default_item ) {
self.image.$item = self.image.$default_item;
self.image.$item.style.display = 'block';
// set image width and height
self.coverImage();
self.clipContainer();
self.onScroll();
}
}
if ( video.isValid() ) {
// Force enable parallax.
// When the parallax disabled on mobile devices, we still need to display videos.
// https://github.com/nk-o/jarallax/issues/159
if ( this.options.disableParallax() ) {
defaultResult = true;
self.image.position = 'absolute';
self.options.type = 'scroll';
self.options.speed = 1;
}
// if parallax will not be inited, we can add thumbnail on background.
if ( ! defaultResult ) {
if ( ! self.defaultInitImgResult ) {
video.getImageURL( ( url ) => {
// save default user styles
const curStyle = self.$item.getAttribute( 'style' );
if ( curStyle ) {
self.$item.setAttribute( 'data-jarallax-original-styles', curStyle );
}
// set new background
self.css( self.$item, {
'background-image': `url("${ url }")`,
'background-position': 'center',
'background-size': 'cover',
} );
} );
}
// init video
} else {
video.on( 'ready', () => {
if ( self.options.videoPlayOnlyVisible ) {
const oldOnScroll = self.onScroll;
self.onScroll = function() {
oldOnScroll.apply( self );
if ( ! self.videoError && ( self.options.videoLoop || ( ! self.options.videoLoop && ! self.videoEnded ) ) ) {
if ( self.isVisible() ) {
video.play();
} else {
video.pause();
}
}
};
} else {
video.play();
}
} );
video.on( 'started', () => {
self.image.$default_item = self.image.$item;
self.image.$item = self.$video;
// set video width and height
self.image.width = self.video.videoWidth || 1280;
self.image.height = self.video.videoHeight || 720;
self.coverImage();
self.clipContainer();
self.onScroll();
// hide image
if ( self.image.$default_item ) {
self.image.$default_item.style.display = 'none';
}
} );
video.on( 'ended', () => {
self.videoEnded = true;
if ( ! self.options.videoLoop ) {
// show default image if Loop disabled.
resetDefaultImage();
}
} );
video.on( 'error', () => {
self.videoError = true;
// show default image if video loading error.
resetDefaultImage();
} );
self.video = video;
// set image if not exists
if ( ! self.defaultInitImgResult ) {
// set empty image on self-hosted video if not defined
self.image.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';
if ( 'local' !== video.type ) {
video.getImageURL( ( url ) => {
self.image.bgImage = `url("${ url }")`;
self.init();
} );
return false;
}
}
}
}
return defaultResult;
};
// Destroy video parallax
const defDestroy = Jarallax.prototype.destroy;
Jarallax.prototype.destroy = function() {
const self = this;
if ( self.image.$default_item ) {
self.image.$item = self.image.$default_item;
delete self.image.$default_item;
}
defDestroy.apply( self );
};
}