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.
151 lines
5.8 KiB
151 lines
5.8 KiB
$(document).ready(function(){ |
|
window.localData = function(r,rr,rrr){ |
|
if(!rrr){rrr={};};if(typeof rrr === 'string'){rrr={n:rrr}};if(!rrr.n){rrr.n='ShinobiLicenseClientSite_'+location.host} |
|
ii={o:localStorage.getItem(rrr.n)};try{ii.o=JSON.parse(ii.o)}catch(e){ii.o={}} |
|
if(!ii.o){ii.o={}} |
|
if(r&&rr&&!rrr.x){ |
|
ii.o[r]=rr; |
|
} |
|
switch(rrr.x){ |
|
case 0: |
|
delete(ii.o[r]) |
|
break; |
|
case 1: |
|
delete(ii.o[r][rr]) |
|
break; |
|
} |
|
localStorage.setItem(rrr.n,JSON.stringify(ii.o)) |
|
return ii.o |
|
} |
|
$.createMenuItemContents = function(contents){ |
|
var menu = Object.assign({ |
|
title: '', |
|
text: '', |
|
type: '', |
|
icon: 'play', |
|
addShell: false, |
|
iconAttribute: ``, |
|
mediaBodyAttribute: ``, |
|
attribute: ``, |
|
},contents) |
|
var html = `<div ${menu.iconAttribute} class="icon ${menu.small ? 'icon-sm' : ''} icon-shape bg-gradient-${menu.type} rounded-circle text-white"> |
|
<i class="fa fa-${menu.icon}"></i> |
|
</div> |
|
<div ${menu.mediaBodyAttribute} class="media-body ml-3 ${menu.mediaBodyClass}"> |
|
<h5 class="heading text-${menu.type} mb-md-1">${menu.title}</h5> |
|
<p class="description d-none d-md-inline-block mb-0">${menu.text}</p> |
|
</div>` |
|
if(menu.addShell === true){ |
|
html = `<a ${menu.attribute} class="${menu.class} media d-flex align-items-center">` + html + `</a>` |
|
} |
|
return html |
|
} |
|
var selectedVideoOnDemand |
|
var runningHlsStream |
|
window.setColorOfMenuItem = function(el,options){ |
|
if(!options)options = {} |
|
el.find(`.text-${options.from}`).removeClass(`text-${options.from}`).addClass(`text-${options.to}`) |
|
el.find(`.bg-gradient-${options.from}`).removeClass(`bg-gradient-${options.from}`).addClass(`bg-gradient-${options.to}`) |
|
} |
|
window.addVodHandlersForStreamPreview = function(options){ |
|
var video = $('#livePreview') |
|
var stream = options.stream |
|
var playlist = stream.files |
|
var position = options.position |
|
video.on('timeupdate',function(){ |
|
var videoTimeNow = this.currentTime |
|
localData('playTime_' + selectedVideoOnDemand,videoTimeNow) |
|
var percent = videoTimeNow * 100 / this.duration |
|
}) |
|
video.on('play',function(){ |
|
localData('lastWatchedPlaying','1') |
|
}) |
|
video.on('pause',function(){ |
|
localData('lastWatchedPlaying','0') |
|
}) |
|
video.on('ended',function(){ |
|
var newPosition = position + 1 |
|
var nextVideoLink = playlist[newPosition] |
|
if(nextVideoLink){ |
|
setColorOfMenuItem($(`[playlistId="${stream.playlistId}"][launchVodFile="${nextVideoLink}"]`),{ |
|
from: 'success', |
|
to: 'primary', |
|
}) |
|
setStreamPreview(nextVideoLink,{ |
|
stream: stream, |
|
position: newPosition, |
|
currentTime: 0 |
|
}) |
|
} |
|
}) |
|
} |
|
window.removeVodHandlersForStreamPreview = function(){ |
|
var video = $('#livePreview') |
|
video.off('timeupdate') |
|
video.off('ended') |
|
} |
|
window.setStreamPreviewName = function(streamUrl,options){ |
|
var urlParts = streamUrl.split('/') |
|
var filename = urlParts[urlParts.length - 1] |
|
$('.mediaActiveFilename').html(`<a href="${streamUrl}" target="_blank">${filename}</a>`) |
|
if(options.stream){ |
|
$('.mediaTitle').text(options.stream.name) |
|
} |
|
} |
|
window.setStreamPreview = function(streamUrl,options){ |
|
if(!options)options = {} |
|
localData('lastWatchedPlaying','0') |
|
setStreamPreviewName(streamUrl,options) |
|
var filePathParts = streamUrl.split('/') |
|
var filename = filePathParts[filePathParts.length - 1] |
|
var videoEl = $('#livePreview') |
|
var video = videoEl[0] |
|
videoEl.off('loadeddata') |
|
var notM3u8 = filename.indexOf('.m3u8') === -1 |
|
if(runningHlsStream){ |
|
runningHlsStream.destroy() |
|
URL.revokeObjectURL(video.src) |
|
} |
|
localData('lastWatched',{ |
|
streamUrl: streamUrl, |
|
options: options |
|
}) |
|
if (notM3u8 || navigator.userAgent.match(/(iPod|iPhone|iPad)/) || (navigator.userAgent.match(/(Safari)/)&&!navigator.userAgent.match('Chrome'))) { |
|
if(selectedVideoOnDemand !== streamUrl)video.src = streamUrl |
|
videoEl.on('loadeddata',function(){ |
|
if(notM3u8){ |
|
var videoTimeNow = localData()['playTime_' + streamUrl] |
|
video.currentTime = options.currentTime || parseFloat(videoTimeNow) || 0 |
|
} |
|
if (video.paused) { |
|
video.play() |
|
} |
|
}) |
|
}else{ |
|
runningHlsStream = new Hls(); |
|
runningHlsStream.loadSource(streamUrl); |
|
runningHlsStream.attachMedia(video); |
|
runningHlsStream.on(Hls.Events.MANIFEST_PARSED,function() { |
|
if (video.paused) { |
|
video.play(); |
|
} |
|
}) |
|
} |
|
removeVodHandlersForStreamPreview() |
|
if(notM3u8){ |
|
selectedVideoOnDemand = streamUrl |
|
addVodHandlersForStreamPreview(options) |
|
}else{ |
|
selectedVideoOnDemand = null |
|
} |
|
} |
|
$.fn.isInViewport = function() { |
|
var elementTop = $(this).offset().top; |
|
var elementBottom = elementTop + $(this).outerHeight(); |
|
|
|
var viewportTop = $(window).scrollTop(); |
|
var viewportBottom = viewportTop + $(window).height(); |
|
|
|
return elementBottom > viewportTop && elementTop < viewportBottom; |
|
}; |
|
})
|
|
|