1/** @license 2 * 3 * ProRadio Music Player: JavaScript player with audio analyzer 4 * ---------------------------------------------- 5 * http://proradio.com/ 6 * 7 * Copyright (c) 2020-2021, ProRadio / Igor Nardo. All rights reserved. 8 * This software cna be used only within our products. It can't be edited or modified for reuse under other projects. 9 * Cannot be re-sold or embedded in other products for sale. 10 * 11 */ 12 13 14// IMPORTANT: THE FOLLOWING IS NOT A COMMENT! IT IS JAVASCIPT IMPORTING! DO NOT DELETE 15// =================================================================================== 16// @codekit-prepend "../components/raphael/raphael.min.js" 17// @codekit-prepend "../soundmanager/script/soundmanager2-nodebug-jsmin.js" 18// @codekit-prepend "qtmplayer-smpo.js" 19// @codekit-prepend "qtmplayer-radiofeed.js" 20 21// Not required codekit-prepend "qtmplayer-webapiplayer.js" 22 23(function($){ 24 25 var qtPlayDebug = $('#qtmplayer').data('qtmplayer-debugger'); 26 var qtAnalyzer = $('#qtmplayer').data('analyzer'); // disable webaudio 27 var qtInitialized = false; 28 var qtPlayIsAllowed = false; 29 var qtShowPlayer = $('#qtmplayer').data('showplayer'); // disable webaudio 30 31 32 if( /MSIE|Edge|Trident/i.test(navigator.userAgent) || ( navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1 ) ){ 33 qtAnalyzer = 0; 34 } 35 36 function qtMplayer_filename(path){ 37 path = path.substring(path.lastIndexOf("/")+ 1); 38 return (path.match(/[^.]+(\.[^?#]+)?/) || [])[0]; 39 } 40 41 // since 3.0.2 moved browser detection to mobile 42 var qtMplayerisMobile = false; 43 if( /MSIE|Edge|Trident/i.test(navigator.userAgent) 44 || ( 45 navigator.userAgent.indexOf('Safari') != -1 46 && 47 navigator.userAgent.indexOf('Chrome') == -1 48 ) 49 ){ 50 qtMplayerisMobile = true; 51 } 52 if( /iPad/i.test(navigator.userAgent) ){ 53 qtMplayerisMobile = true; 54 } 55 if( /iPhone/i.test(navigator.userAgent) ){ 56 qtMplayerisMobile = true; 57 } 58 if (screen.width <= 1119){ 59 qtMplayerisMobile = true; 60 } 61 if(true === qtMplayerisMobile){ 62 qtAnalyzer = 0; 63 } 64 65 66 $.qtMplayerGlobalSongData = { 67 title: false, 68 artist: false, 69 thumbnail: false 70 }; 71 72 $.qtMplayerPlaylistCue = { 73 minicue: false, 74 tadv: false, 75 init: function(){ 76 $.qtMplayerPlaylistCue.destroy(); 77 var item, offset, width,left, 78 minicue, det;; 79 item = $("li.qtmplayer-played"); 80 if(item.length > 0){ 81 offset = item.offset().left; 82 width = item.width(); 83 left = 0; 84 item.append('<div id="qtMplayerPlaylistTrack" class="qtmplayer-playlist__track"><span id="qtMplayerPlaylistTrackAdv" data-qtmplayer-trackadv class="qtmplayer-track-adv qtmplayer-content-accent"></span>
84<span id="qtMplayerPlaylistMinicue" class="qtmplayer-playlist-minicue"></span></div>'); 85 $.qtMplayerPlaylistCue.minicue = $("#qtMplayerPlaylistMinicue"); 86 $.qtMplayerPlaylistCue.tadv = $("#qtMplayerPlaylistTrackAdv"); 87 det = $("#qtMplayerPlaylistTrack"); 88 det.off("mousemove").off("click"); 89 det.on("mousemove", function(e){ 90 left = e.clientX - offset; 91 $.qtMplayerPlaylistCue.minicue.css({ 92 'left': left, 93 'transition': 'left 0.1s' 94 }); 95 }); 96 det.on("click", function(e){ 97 $.qtPlayerObj.uniPlayer.seek((e.clientX - offset) / width * 100); 98 }); 99 } 100 }, 101 update:function(p){ 102 if($.qtMplayerPlaylistCue.tadv){ 103 $.qtMplayerPlaylistCue.tadv.css({"width": p+'%'}); 104 } 105 if($.qtMplayerPlaylistCue.minicue){ 106 // $.qtMplayerPlaylistCue.minicue.css({"left": p+'%'}); 107 } 108 }, 109 destroy: function(){ 110 $("#qtMplayerPlaylistTrack").remove(); 111 } 112 }; 113 114 /** 115 * =========================================================================== 116 * Circle for podcast 117 * @type {Object} 118 * =========================================================================== 119 */ 120 $.qtRaphaelCircle = { 121 container: $(".qtmplayer-circularplayer"), 122 findXY: function(obj) { 123 var curleft = 0, curtop = 0; 124 do { 125 curleft += obj.offsetLeft; 126 curtop += obj.offsetTop; 127 } while (!!(obj = obj.offsetParent)); 128 return [curleft,curtop]; 129 }, 130 getScrollLeft: function() { 131 return ($('body').scrollLeft+document.documentElement.scrollLeft); 132 }, 133 getScrollTop: function() { 134 return ($('body').scrollTop+document.documentElement.scrollTop); 135 }, 136 init: function(){ 137 138 var RC = $.qtRaphaelCircle, 139 rcontainer = $("#qtdonut"), 140 141 cH = rcontainer.height(), 142 cW = rcontainer.width(), 143 R = cH / 2; 144 RC.destroy(); 145 rcontainer.find("svg").remove(); 146 RC.R = R; 147 var archtype = new Raphael("qtdonut", cW, cH); 148 archtype.customAttributes.arc = function (xloc, yloc, value, total, R) { 149 var alpha = 360 / total * value, 150 a = (90 - alpha) * Math.PI / 180, 151 x = xloc + R * Math.cos(a), 152 y = yloc - R * Math.sin(a), 153 path; 154 if (total === value) { 155 path = [ 156 ["M", xloc, yloc - R], 157 ["A", R, R, 0, 1, 1, xloc, yloc - R] 158 ]; 159 } else { 160 path = [ 161 ["M", xloc, yloc - R], 162 ["A", R, R, 0, +(alpha > 180), 1, x, y] 163 ]; 164 } 165 return { 166 path: path 167 }; 168 }; 169 var my_arc = archtype.path().attr({ 170 "stroke": "#fff", 171 "stroke-width": '22px', 172 arc: [0, 0, 0, 0, 0] 173 }); 174 RC.arc = my_arc; 175 RC.container = rcontainer; 176 var uA = navigator.userAgent, 177 isOpera = (uA.match(/opera/i)), 178 isChrome = (uA.match(/chrome/i)), 179 isTouchDevice = (uA.match(/ipad|iphone/i)), 180 fullCircle = (isOpera||isChrome?359.9:360), 181 angle, offl, offt, 182 dx,dy,coords, perc; 183 184 rcontainer.on('click','svg',function(e){ 185 e = e?e:window.event; 186 if (isTouchDevice && e.touches) { 187 e = e.touches[0]; 188 } 189 if (e.pageX || e.pageY) { 190 coords = [e.pageX,e.pageY]; 191 } else if (e.clientX || e.clientY) { 192 coords = [e.clientX+RC.getScrollLeft(),e.clientY+RC.getScrollTop()]; 193 } 194 offl = rcontainer.offset().left; 195 offt = rcontainer.offset().top - $(window).scrollTop() ; 196 dx = e.clientX - (offl + (cW / 2)); 197 dy = e.clientY - (offt + (cH / 2)); 198 angle = Math.floor(fullCircle-( (Math.atan2(dx,dy) * 180/Math.PI ) +180)); 199 perc = angle/fullCircle * 100; 200 $.qtPlayerObj.uniPlayer.seek(perc); 201 }); 202 rcontainer.addClass("active"); 203 }, 204 update: function(p){ 205 var RC = $.qtRaphaelCircle, 206 R = RC.R; 207 if(typeof(p) === 'undefined' || typeof(RC.arc) === 'undefined' ){ 208 return; 209 } 210 if(isNaN(p)){ 211 return; 212 } 213 RC.arc.animate({ 214 arc: [R, R, p*100, 100, R] 215 }, 2, "ease"); 216 }, 217 destroy: function(){ 218 var RC = $.qtRaphaelCircle; 219 220 if(typeof(RC.arc) !== 'undefined'){ 221 RC.arc.remove(); 222 RC.container.removeClass('active'); 223 } 224 if(typeof(RC.container) !== 'undefined'){ 225 RC.container.removeClass('active'); 226 } 227 } 228 }; 229 230 231 232 233 $.qtPlayerObj = { 234 isSoundApi: false, 235 playing: false, 236 hasDoneAutoplay: false, 237 masterVolume: $('#qtmplayer').data('qtmplayer-startvol'),//100, 238 ProRadioUserManagerIntegration: { 239 shouldBlock: function( songdata ){ 240 if('undefined' == typeof($.ProRadioUserManager)){ 241 return; 242 } 243 if( 'undefined' === typeof( songdata ) ){ 244 songdata = $.qtPlayerObj.songdata; 245 } 246 var prum = $.ProRadioUserManager; 247 var blocking = $.qtPlayerObj.songdata.blocking; 248 249 if( undefined !== blocking ){ 250 console.log( blocking ); 251 prum.fn.modal.openModal(prum, blocking); 252 return true; 253 } 254 return false;
255 } 256 }, 257 uniPlayer: { 258 btnPlay: $("[data-qtmplayer-playbtn]"), //btnPlay: $("#qtmplayerPlay"), 259 canMoove: true, 260 pause: function(){ 261 // qtmplayer-radiofeed.js 262 $.qtPlayerObj.playing = false; 263 if('object' === typeof($.qtmplayerRadioFeedObj)){ // check if the file is loaded 264 $.qtmplayerRadioFeedObj.fn.stopFeed(); 265 } 266 $.qtPlayerObj.interface.justStop(); 267 if( 'radio' === $.qtPlayerObj.songdata.type ){ 268 // With this, after pausing from the bar, music can't restart 269 $.qtPlayerObj.songdata.file_hold = $.qtPlayerObj.songdata.file; // Store stream in a temorary object 270 $.qtPlayerObj.songdata.file = 'file_hold'; // replace stream with a string to block it 271 $.qtPlayerObj.interface.doSpinner(false); 272 if($.qtPlayerObj.isSoundApi === true){ 273 $.qtWebApiPlayer.stop(); 274 } else { 275 $.qtSMPO.smStop(); 276 } 277 278 } else { 279 if($.qtPlayerObj.isSoundApi === true){ 280 $.qtWebApiPlayer.pause(); 281 } else { 282 $.qtSMPO.smPause(); 283 } 284 } 285 }, 286 webapiPlay: function(){ 287 $.qtWebApiPlayer.play($.qtPlayerObj.songdata.file); 288 }, 289 radioFeedCallback:function( feedImageUrl ){ 290 var fallback = $.qtPlayerObj.imgCover.attr('data-fallback'); 291 if(undefined !== feedImageUrl){ 292 $.qtPlayerObj.imgCover.attr( 'src', feedImageUrl ).show(); 293 } else { 294 if(fallback) { 295 $.qtPlayerObj.imgCover.attr('src', fallback).show(); 296 } else { 297 $.qtPlayerObj.imgCover.hide(); 298 } 299 } 300 }, 301 play: function(){ 302 303 if('function' == typeof($.qtmplayerRadioFeedObj.fn.updateMediaData)){ 304 // console.log('Play update;'); 305 $.qtmplayerRadioFeedObj.fn.updateMediaData(); 306 } 307 308 309 if ($.qtPlayerObj.uniPlayer.btnPlay.find("i.material-icons").html() === 'pause') { 310 return; 311 } 312 if(qtInitialized && qtPlayIsAllowed){ 313 $.qtPlayerObj.uniPlayer.btnPlay.find("i.material-icons").html("pause"); 314 if($.qtPlayerObj.isSoundApi === true){ 315 $.qtWebApiPlayer.play($.qtPlayerObj.songdata.file); 316 } else { 317 if( 'radio' === $.qtPlayerObj.songdata.type && 'file_hold' === $.qtPlayerObj.songdata.file ){ 318 $.qtPlayerObj.songdata.file = $.qtPlayerObj.songdata.file_hold; 319 // FIX-2021-06-16_01 - set volume fix after change track 320 // fix issue when after pause the feed doesn't restart 321 $.qtmplayerRadioFeedObj.fn.pushFeed( $.qtPlayerObj.songdata ); 322 323 } 324 325 // console.log( $.qtPlayerObj.songdata ); 326 if('undefined' !== typeof($.qtMplayerStats)){ 327 $.qtMplayerStats.sendHit( $.qtPlayerObj.songdata ); 328 } 329 330 $.qtSMPO.smPause(); 331 $.qtSMPO.smPlay(); 332 } 333 // FIX-2021-06-16_02 - set volume fix after change track 334 setTimeout( 335 function(){ 336 if($.qtPlayerObj.masterVolume !== 100){ 337 var mvol = $.qtPlayerObj.masterVolume; 338 $.qtPlayerObj.uniPlayer.setVolume( mvol ); 339 $("[data-qtmplayer-vball]").css({'top': 100 - mvol}); 340 $("[data-qtmplayer-vfill]").css({'height':mvol+'%'}); 341 } 342 }, 300 343 ); 344 $.qtPlayerObj.playing = true; 345 } 346 }, 347 seek: function(p){ // p = percentage 348 if(isNaN(p)){ 349 return; 350 } 351 p = parseFloat(p); 352 if(p > 100){ 353 p = 100; 354 } 355 if($.qtPlayerObj.isSoundApi === true){ 356 $.qtWebApiPlayer.seek(p); 357 } else { 358 $.qtSMPO.smSeek(p); 359 } 360 }, 361 seekTime: function(t){ 362 if(t === '00:00'){ 363 t = '00:00:00'; 364 } 365 if($.qtPlayerObj.isSoundApi === true){ 366 $.qtWebApiPlayer.seekTime(t); 367 } else { 368 $.qtSMPO.smSeekTime(t); 369 } 370 }, 371 setVolume: function(v){ 372 // console.log(v); 373 $.qtPlayerObj.masterVolume = v; 374 if($.qtPlayerObj.isSoundApi === true){ 375 $.qtWebApiPlayer.setvolume(v / 100); 376 } else { 377 $.qtSMPO.sm.setVolume(v); 378 } 379 } 380 }, 381 382 383 /** 384 * ================================================================ 385 * 386 * [interface functions controlling interaction and visual feedback] 387 * @type {Object} 388 * 389 * ================================================================ 390 */ 391 interface: { 392 window: $(window), 393 body: $("body"), 394 htmlAndbody: $('html,body'), 395 player: $('#qtmplayer'),
396 controls: $('#qtmplayer-controls'), 397 qtmplayer: $('#qtmplayer-playlistcontainer'), 398 playlist: $("#qtmplayer-playlist ul"), 399 grooveadv: $('#qtMplayerTadv'), // music cue 400 buffer: $('#qtMplayerBuffer'), // buffer 401 progWave: $('#qtMplayerprogWave'), // buffer 402 advance: $("#qtMplayerTadv"), 403 btnPlay: $("[data-qtmplayer-playbtn]"), // $("#qtmplayerPlay"), 404 control: $("#qtmplayerTrackControl"), 405 minicue: $("#qtMplayerMiniCue"), 406 minicueT: $("#qtMplayerPlaylistTrackMinicue"), 407 trackAdvance: $("#qtmplayerTrackAdv"), 408 time: $("#qtmplayerTime"), 409 autoplay: $('#qtmplayer').data('autoplay'), 410 artwork: $('#qtmplayer').data('artwork'), 411 dragging: false, 412 vdragging: false, 413 debug: function(msg){ 414 $("#qtmplayerDebug").prepend(msg+'<br>'); 415 }, 416 doSpinner: function(state, content){ 417 var notif = $('[data-qtmplayerNotif]'); 418 notif.html(content); 419 if( true === state ){ 420 notif.addClass("active qtmplayer-spinner"); 421 } else { 422 notif.removeClass("active").removeClass("qtmplayer-spinner"); 423 } 424 }, 425 preloadTrack: function(qtmpid){ 426 var p = $.qtPlayerObj, 427 i = p.interface; 428 p.interface.doSpinner(true); 429 430 // Since 3.9.4 preload custom track // still in alpha (incomplete function) 431 var firstTrack = "li:first-child"; 432 // if( false !== qtmpid ){ 433 // console.log(qtmpid) ; 434 // firstTrack = 'li[data-qtmplayer-qtmpid="'+qtmpid+'"]'; 435 // } 436 437 i.playlist.find(firstTrack + " .qtmplayer-play-btn").each(function(i,c){ 438 var trk = $(c), 439 q = 'qtmplayer-'; 440 441 p.songdata = {}; 442 $.each(trk.data() , function(i,c){ 443 var newKey = i.replace("qtmplayer", "").toLowerCase(); 444 p.songdata[newKey] = c; 445 }); 446 447 448 $('.qtmplayer-played').removeClass('qtmplayer-played'); 449 trk.closest(".qtmplayer-trackitem").addClass("qtmplayer-played"); 450 var c = $.qtPlayerObj.interface.controls, 451 ot = false; 452 if(qtShowPlayer){ 453 p.interface.showhide(); 454 } 455 456 457 if(p.interface.deployTrack()){ 458 if(p.interface.autoplay){ 459 setTimeout( 460 p.uniPlayer.play, 461 2200 462 ); 463 } 464 } 465 }); 466 }, 467 468 isMobile: function(){ 469 return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) || $(window).width() < 1170 ; 470 }, 471 472 473 deployTrack: function(autoplay){ 474 var o = $.qtPlayerObj, 475 i = o.interface, 476 hd = i.controls, 477 dt = o.songdata, 478 mp = i.qtmplayer, 479 durtime = $("#qtmplayerDuration"), 480 cartlink, 481 cartbt = hd.find('.qtmplayer__cart'), 482 cur_url = window.location.href, 483 wc_params = '', 484 wc_classes = '', 485 params, // for URL 486 params_str; // for URL 487 if(dt.file == ''){ 488 return; 489 } 490 491 492 if(true === qtMplayerisMobile && $.qtPlayerObj.songdata.file_mobile && screen.width <= 1119 ){ 493 $.qtPlayerObj.songdata.file = $.qtPlayerObj.songdata.file_mobile; 494 } 495 496 // console.log( 'Is mobile? ' + qtMplayerisMobile + screen.width ); 497 498 499 i.doSpinner(true); 500 501 if(false == qtInitialized){ 502 setTimeout( 503 i.doSpinner, 504 1000 505 ); 506 } 507 508 $.qtPlayerObj.interface.waveformAdvance = false; 509 510 if( 'radio' === dt.type ){ 511 i.minicue.hide(); 512 i.buffer.hide(); 513 i.trackAdvance.hide(); 514 durtime.hide(); 515 i.control.addClass('qtmplayer-is-radio'); 516 $('#qtmplayerTrackControl canvas').remove(); 517 if( $.qtmplayerRadioFeedObj ){ 518 $.qtPlayerObj.songdata.callBack = false; 519 if( $.qtPlayerObj.interface.artwork ){ 520 $.qtPlayerObj.imgCover = $.qtPlayerObj.interface.controls.find('.qtmplayer__cover img'); 521 var original = $.qtPlayerObj.imgCover.attr('src'); 522 if( original ){ 523 $.qtPlayerObj.imgCover.attr('data-fallback', original); 524 } 525 $.qtPlayerObj.interface.controls.find('.qtmplayer__cover img').attr('data-fallback', original); 526 $.qtPlayerObj.songdata.callBack = $.qtPlayerObj.uniPlayer.radioFeedCallback; 527 } 528 $.qtmplayerRadioFeedObj.fn.pushFeed( $.qtPlayerObj.songdata ); 529 } 530 } else { 531 i.control.removeClass('qtmplayer-is-radio'); 532 if( $.qtmplayerRadioFeedObj ){ 533 $.qtmplayerRadioFeedObj.fn.stopFeed(); 534 } 535 536 i.minicue.show(); 537 i.buffer.show(); 538 i.trackAdvance.show(); 539 durtime.show(); 540 if( false === i.isMobile() ){ 541 var comp = new RegExp(location.host); 542 try { 543 if(comp.test( dt.file ) && 'function' === typeof(qtDrawAudio)){ 544 qtDrawAudio(dt.file); 545 $.qtPlayerObj.interface.waveformAdvance = $('#qtwaveformClone'); 546 } else { 547 $('#qtmplayerTrackControl canvas').remove(); 548 } 549 } catch(e){ 550 console.log(e); 551 } 552 } 553 } 554 555 if(dt.buylink == '' || dt.buylink == 'undefined' || typeof(dt.buylink) === 'undefined'){ 556 cartbt.css({'opacity':0, 'pointer-events': 'none'}); 557 } else { 558 cartbt.css({'opacity':1, 'pointer-events': 'initial'}); 559 } 560 561 562 $('.qtmplayer__actions .added_to_cart.wc-forward').remove(); 563 564 if( dt.link !== ''){ 565 hd.find('.qtmplayer__title').html('<a href="'+dt.link+'"><strong>'+dt.title+'</strong></a> '); 566 } else { 567 hd.find('.qtmplayer__title').html(dt.title); 568 } 569 570 571 hd.find('.qtmplayer__artist').text(dt.artist); 572 if(typeof( dt.album ) !== 'undefined' && dt.album !== ''){ 573 hd.find('.qtmplayer__title').append('['+dt.album+']'); 574 $.qtMplayerGlobalSongData.album = dt.album; 575 } 576 hd.find('.qtmplayer__cover').attr("href", dt.link); 577 578 579 $.qtMplayerGlobalSongData.title = dt.title; 580 $.qtMplayerGlobalSongData.artist = dt.artist; 581 if( dt.cover ){ 582 $.qtMplayerGlobalSongData.thumbnail = dt.cover; 583 } else { 584 $.qtMplayerGlobalSongData.thumbnail = false;
585 } 586 587 // WooCommerce support added 588 cartbt.addClass('qtmplayer__disabled'); 589 cartbt.off('click'); 590 if(dt.buylink !== ''){ 591 cartbt.removeClass('qtmplayer__disabled'); 592 // WooCommerce 593 cartlink = dt.buylink; 594 if('undefined' !== typeof( dt.buylink )) { 595 dt.buylink = dt.buylink.toString(); 596 if (dt.buylink.match(/^-?\d+$/)) { // is a numeric ID 597 params = { "add-to-cart":dt.buylink }; 598 params_str = jQuery.param( params ); 599 if(cur_url.indexOf('?') != -1) { 600 cartlink = cur_url+"&"+params_str; 601 }else{ 602 cartlink = cur_url+"?"+params_str; 603 } 604 // Extra cart classes and attrs 605 wc_classes = ' product_type_simple add_to_cart_button ajax_add_to_cart '; 606 cartbt.attr("href", cartlink).attr('data-quantity','1').attr('data-product_id', dt.buylink).addClass(wc_classes).show(); 607 } else { 608 cartbt.attr("href", dt.buylink).removeClass('product_type_simple').removeClass('add_to_cart_button').removeClass('ajax_add_to_cart').show(); 609 } 610 611 // PR.6.3.0 612 // If link is another domain, add target _blank, or remove it 613 var linkUrl = new URL( cartlink ); 614 if( linkUrl.host === window.location.host && ! $('body').hasClass('qtmplayer--page-popup') ){ 615 cartbt.attr('target', ''); 616 } else { 617 cartbt.attr('target', '_blank'); 618 } 619 } 620 621 622 623 624 if(dt.icon == 'download') { 625 dt.icon = 'file_download'; 626 } 627 cartbt.show(); 628 } else { 629 cartbt.hide(); 630 cartbt.removeClass('product_type_simple').removeClass('add_to_cart_button').removeClass('ajax_add_to_cart'); 631 } 632 633 634 635 636 637 cartbt.find('i').html(dt.icon); 638 639 i.advance.width(0); 640 641 if( false !== i.waveformAdvance && "undefined" !== typeof(i.waveformAdvance) ){ 642 i.waveformAdvance.css({ 643 "clip-path": "polygon(0 0, 0% 0, 0% 100%, 0% 100%)" 644 }); 645 } 646 647 648 i.buffer.width(0); 649 if(dt.cover !== '' && dt.cover !== undefined){ 650 mp.find('.qtmplayer__album img').attr("src", dt.cover).show(); 651 hd.find('.qtmplayer__cover img').attr("src", dt.cover).show(); 652 hd.find('.qtmplayer__bgimg').css({"background-image": 'url('+dt.cover+')' }); 653 } else { 654 mp.find('.qtmplayer__album img').hide(); 655 hd.find('.qtmplayer__cover img').hide(); 656 hd.find('.qtmplayer__bgimg').css({"background-image": 'none' }); 657 } 658 mp.find('.qtmplayer-albumlink').attr("href",dt.link); 659 if(qtShowPlayer){ 660 i.showhide(); 661 } 662 663 664 665 666 i.btnPlayClick(); 667 i.playTrack(); 668 if(autoplay){ 669 o.uniPlayer.play(); 670 } 671 return true; 672 }, 673 btnPlaySetup: function(dt){ 674 var state = 'pause', 675 o = $.qtPlayerObj, 676 i = o.interface, 677 b = i.btnPlay, 678 p = o.uniPlayer; 679 680 b.off("click"); 681 b.on("click", function(e){ 682 e.preventDefault(); 683 state = b.find("i").html(); 684 if(state === 'pause'){ 685 $(".qtmplayer-played .qtmplayer-play-btn").click(); 686 } else { 687 $('#qtmplayer-playlist li:first-child').find(".qtmplayer-play-btn").click(); 688 } 689 }); 690 }, 691 /** 692 * Questa funzione è probabilmente inutile adesso 693 */ 694 btnPlayClick: function(){ 695 696 var state = 'pause', 697 o = $.qtPlayerObj, 698 i = o.interface, 699 b = i.btnPlay, 700 p = o.uniPlayer; 701 b.off("click"); 702 b.on("click", function(e){ 703 e.preventDefault(); 704 // state = b.find("i").html(); 705 state = b.find("i.material-icons").html(); 706 if(state === 'pause'){ 707 p.pause(); 708 } else { 709 710 711 712 if(false == qtInitialized){ 713 i.doSpinner(true); 714 i.initializeAudio(); 715 if( true === $.qtPlayerObj.ProRadioUserManagerIntegration.shouldBlock() ){ 716 i.doSpinner(false); 717 return; 718 } 719 qtPlayIsAllowed = true; 720 setTimeout( 721 p.play, 722 200 723 ); 724 } else { 725 if( true === $.qtPlayerObj.ProRadioUserManagerIntegration.shouldBlock() ){ 726 i.doSpinner(false); 727 return; 728 } 729 qtPlayIsAllowed = true; 730 p.play(); 731 } 732 } 733 return true; 734 }); 735 }, 736 playTrack: function(){ 737 var p = $.qtPlayerObj, 738 i = p.interface, 739 u = p.uniPlayer;
740 i.body.off("click", ".qtmplayer-play-btn"); 741 i.body.on("click", ".qtmplayer-play-btn", function(e){ 742 e.preventDefault(); 743 744 745 746 747 qtPlayIsAllowed = true; 748 i.doSpinner(true); 749 var tr = $(this), 750 item = tr.closest(".qtmplayer-trackitem"), 751 isDonut = item.hasClass("qtmplayer-donut"), 752 icon = tr.find("i"), 753 clickedsong = tr.attr('data-qtmplayer-file'), 754 playedclass = "qtmplayer-played", 755 playedtrack = i.body.find("."+playedclass), 756 iplay = "dripicons-media-play", 757 ipause = "dripicons-media-pause"; 758 if(item.hasClass(playedclass) && tr.find('i').html() === 'pause'){ 759 i.switchicon(icon, 'play'); 760 item.removeClass(playedclass); 761 i.switchicon(playedtrack.find('.qtmplayer-play-btn i.material-icons'), 'play'); 762 u.pause(); 763 e.stopPropagation(); 764 return; 765 } else { 766 // Check if is the same track. If yes pause, if not stop the first play the second 767 // update 2019 05 22 768 if(clickedsong === p.songdata.file) { 769 if(playedtrack.length > 0){ 770 771 if(p.uniPlayer.btnPlay.find("i.material-icons").html() === 'pause'){ 772 playedtrack.removeClass(playedclass); 773 i.switchicon(playedtrack.find('.qtmplayer-play-btn i.material-icons'), 'play'); 774 u.pause(); 775 e.stopPropagation(); 776 return; 777 } else { 778 u.pause(); 779 i.switchicon(playedtrack.find('.qtmplayer-play-btn i.material-icons'), 'play'); 780 playedtrack.removeClass(playedclass); 781 } 782 783 } 784 } else { 785 i.switchicon(playedtrack.find('.qtmplayer-play-btn i.material-icons'), 'play'); 786 playedtrack.removeClass(playedclass); 787 i.justStop(); 788 u.pause(); 789 } 790 791 792 if( undefined === tr.data("qtmplayer-type") ){ 793 tr.data("qtmplayer-type", 'track'); 794 } 795 796 797 // 2019 12 29 new faster remapping of data 798 p.songdata = {}; 799 800 $.each(tr.data() , function(i,c){ 801 var newKey = i.replace("qtmplayer", "").toLowerCase(); 802 p.songdata[newKey] = c; 803 }); 804 805 806 i.deployTrack(); 807 808 if( true === $.qtPlayerObj.ProRadioUserManagerIntegration.shouldBlock() ){ 809 return; 810 } 811 812 i.seekBtn(); 813 i.switchicon(icon, 'pause'); 814 item.addClass(playedclass); 815 if($("#qtdonut").length > 0){ 816 $("#qtdonut").removeAttr("id"); 817 } 818 if(isDonut){ 819 item.attr("id", "qtdonut"); 820 $.qtMplayerPlaylistCue.destroy(); 821 if( 'track' === p.songdata.type){ 822 $.qtRaphaelCircle.init(); 823 } 824 } else { 825 if( 'track' === p.songdata.type){ 826 $.qtMplayerPlaylistCue.init(); 827 } 828 } 829 830 831 // safe initialization 832 if(false == qtInitialized){ 833 i.initializeAudio(); 834 i.doSpinner(true); 835 836 837 838 setTimeout( 839 u.play, 840 2200 841 ); 842 } else { 843 u.play(); 844 } 845 846 // u.play(); 847 } 848 e.stopPropagation(); 849 }); 850 }, 851 852 switchicon: function(i, state) { 853 if(state === 'play'){ 854 i.html('play_arrow'); 855 } else if (state === 'pause') { 856 i.html('pause'); 857 } 858 }, 859 progressUpdate: function(perc){ // buffered 860 var i = $.qtPlayerObj.interface, 861 p = perc * 100; 862 i.buffer.css({width: p+'%'}); 863 i.minicue.addClass('actvd'); 864 865 }, 866 timeupdate: function(perc, time){ 867 var i = $.qtPlayerObj.interface, 868 p = perc * 100; 869 i.advance.css({ 870 width: (p)+'%', 871 'transition':'width 0.3s', 872 }); 873 if(false !== i.waveformAdvance && "undefined" !== typeof( i.waveformAdvance ) ){ 874 i.waveformAdvance.css({ 875 'transition':'clip-path 0.3s', 876 "clip-path": "polygon(0 0, "+(p)+"% 0, "+(p)+"% 100%, 0% 100%)" 877 }); 878 } 879 i.time.html(time); 880 if(perc > 0.001){ 881 i.doSpinner(); 882 setTimeout( 883 i.doSpinner, 884 300 885 ); 886 } 887 if($('#qtMplayerprogWave')){ 888 $('#qtMplayerprogWave').css({width: (p)+'%'}); 889 } 890 if(i.dragging === false) { 891 892 i.minicue.css({ 893 'transition':'left 0.3s', 894 "left": (p)+'%' 895 }); 896 } 897 }, 898 seekBtn: function(){ 899 var o = $.qtPlayerObj, 900 i = o.interface, 901 c = i.control, 902 m = i.minicue, 903 ol = c.offset().left, 904 w = c.outerWidth(), 905 t = (o.songdata.type == 'radio') ? 'radio' : 'track', 906 l, 907 active = false, 908 currentX, currentY, initialX, initialY, 909 xOffset = 0; 910 yOffset = 0; 911 dragItem = m; 912 c.off("touchstart").off("touchend").off('touchmove').off('mousedown').off('mouseup').off('mouseleave').off('mousemove'); 913 if(t === 'radio') { 914 m.css({'left': 0}); 915 } else { 916 c.on("touchstart", dragStart); 917 c.on("touchend", dragEnd); 918 c.on("touchmove", drag); 919 c.on("mousedown", dragStart); 920 c.on("mouseup", dragEnd); 921 c.on("mouseleave", dragEnd); 922 c.on("mousemove", drag); 923 function dragStart(e) { 924 i.dragging = true; 925 active = true; 926 m.addClass('qtmplayer-touch'); 927 } 928 function dragEnd(e) { 929 i.dragging = false;
930 active = false; 931 m.removeClass('qtmplayer-touch'); 932 } 933 function drag(e) { 934 ol = c.offset().left; 935 w = c.outerWidth(); 936 if (e.type === "touchmove") { 937 l = e.originalEvent.touches[0].pageX - ol; 938 } else { 939 l = e.clientX - ol; 940 } 941 if(active){ 942 relocate(l); 943 } 944 } 945 function relocate(l){ 946 var p = l / w; 947 if( p < 0 || p > 99.9 ){ 948 return; 949 } 950 m.css({'left': l}); 951 o.uniPlayer.seek(p * 100); 952 } 953 } 954 }, 955 appendAlbum: function(){ 956 var p = $.qtPlayerObj, 957 i = p.interface, 958 c = i.controls, 959 cartlink, 960 cur_url = window.location.href, 961 wc_params = '', 962 wc_classes = '', 963 params, // for URL 964 params_str, // for URL 965 ot = false, // timeout 966 notif = $('[data-qtmplayerNotif]'); 967 i.body.on("click", "[data-qtmplayer-addrelease]", function(e){ 968 e.preventDefault(); 969 var that = $(this), 970 url = that.data("qtmplayer-addrelease"), 971 playnow = that.data("playnow"), 972 latestAdded = 'qtmplayer-latestadded'; 973 if(that.data("qtmplayer-addrelease") == '0' || that.hasClass("disabled")){ 974 return; 975 } 976 $.getJSON(url, function( data ) { 977 var newitem, 978 special_action, 979 tn = data.length; 980 $.each( data, function( key, val ) { 981 // WooCommerce 982 cartlink = val.buylink; 983 if (val.buylink.match(/^-?\d+$/)) { // is a numeric ID 984 params = { "add-to-cart":val.buylink }; 985 params_str = jQuery.param( params ); 986 if( cur_url) { 987 if( cur_url.indexOf("?")>= 0 ) { 988 cartlink = cur_url+"&"+params_str; 989 }else{ 990 cartlink = cur_url+"?"+params_str; 991 } 992 } 993 // Extra cart classes and attrs 994 wc_classes = ' product_type_simple add_to_cart_button ajax_add_to_cart '; 995 wc_params = ' data-quantity="1" data-product_id="'+ val.buylink +'" '; 996 } 997 special_action = '<i class="material-icons">'+val.icon+'</i>'; 998 if( typeof(val.price) !== 'undefined'){ 999 if (val.price !== ''){ 1000 special_action = '<span class="qtmplayer-price qtmplayer-btn qtmplayer-btn-xs qtmplayer-btn-primary">'+val.price+'</span>'; 1001 } 1002 } 1003 newitem = '<li class="qtmplayer-trackitem dynamic">'; 1004 if(val.cover !== ''){ 1005 newitem += '<img src="'+val.cover+'">'; 1006 } 1007 newitem += '<span class="qtmplayer-play qtmplayer-link-sec qtmplayer-play-btn '+latestAdded+'" data-qtmplayer-type="track" data-qtmplayer-cover="'+val.cover+'" data-qtmplayer-price="'+val.price+'" data-qtmplayer-file="'+val.file+'" data-qtmplayer-title="'+val.title+'"'+'data-qtmplayer-artist="'+val.artist+'"'+'data-qtmplayer-album="'+val.album+'" data-qtmplayer-link="'+val.link+'" data-qtmplayer-buylink="'+val.buylink+'" data-qtmplayer-icon="'+val.icon+'"><i class="material-icons">play_arrow</i></span><p> <span class="qtmplayer-tit">'+val.title+'</span><br> <span class="qtmplayer-art">'+val.artist+'</span></p><a href="'+cartlink+'" '+wc_params+' class="qtmplayer-cart '+ wc_classes +'" target="_blank">'+special_action+'</a></li>'; 1008 i.playlist.append(newitem); 1009 if(0 === key && playnow){ 1010 $.qtPlayerObj.interface.justStop(); 1011 $.qtPlayerObj.uniPlayer.pause(); 1012 p.songdata = val; 1013 $("."+latestAdded).click(); 1014 } 1015 latestAdded = ''; 1016 }); 1017 i.showhide(); 1018 if(that.data("clickonce") === 1){ 1019 that.hide(); 1020 1021 $(that.data("notificate")).addClass("active"); 1022 1023 } else { 1024 that.addClass('disabled'); 1025 1026 } 1027 notif.addClass("wait").delay(1500).promise().done(function(){ 1028 notif.removeClass("wait"); 1029 }); 1030 // Disable the functionality 1031 that.attr("data-qtmplayer-addrelease", '0'); 1032 }); 1033 }); 1034 }, 1035 showhide: function(){ 1036 var c = $.qtPlayerObj.interface.controls; 1037 c.addClass('open'); 1038 ot = setTimeout(function() { 1039 c.removeClass('open'); 1040 clearTimeout(ot); 1041 }, 4000); 1042 }, 1043 prevNext: function(){ 1044 $.qtPlayerObj.interface.controls.on("click",".qtmplayer__prev, .qtmplayer__next", function(e){ 1045 e.preventDefault(); 1046 var t = $(this), b; 1047 $.qtPlayerObj.interface.doSpinner(true);
1048 if(t.data("control") === "prev"){ 1049 b = $(".qtmplayer-played").prev(); 1050 } else { 1051 b = $(".qtmplayer-played").next(); 1052 } 1053 b.find(".qtmplayer-play-btn").click(); 1054 }); 1055 }, 1056 next: function(){ 1057 var i = $.qtPlayerObj.interface, 1058 nt = $(".qtmplayer-played").next(); 1059 var playedParent = $(".qtmplayer-played").closest(".proradio-chart-track"); 1060 if(playedParent.length){ 1061 var nextChartTrack = playedParent.next(".proradio-chart-track").find('.collapsible-header'); 1062 if(nextChartTrack.length){ 1063 nextChartTrack.click(); 1064 nt = playedParent.next(".proradio-chart-track").find(".qtmplayer-trackitem"); 1065 } 1066 } 1067 if(nt !== undefined){ 1068 if(nt.length > 0){ 1069 nt.find(".qtmplayer-play-btn").click(); 1070 } else { 1071 i.justStop(); 1072 } 1073 } else { 1074 i.justStop(); 1075 } 1076 }, 1077 justStop: function(){ 1078 $.qtPlayerObj.interface.switchicon($(".qtmplayer-played .qtmplayer-play-btn i.material-icons"), 'play'); 1079 $.qtPlayerObj.uniPlayer.btnPlay.find("i.material-icons").html("play_arrow"); 1080 }, 1081 skipCue: function(){ 1082 var o = $.qtPlayerObj, 1083 i = o.interface 1084 b = i.btnPlay, 1085 p = o.uniPlayer; 1086 i.body.on('click', '[data-qtplayercue]',function(){ 1087 var t = $(this), 1088 k = t.data('qttrackurl'), 1089 c = t.data('qtplayercue'); 1090 1091 if("undefined" === typeof( o.songdata.type )) { 1092 return; 1093 } 1094 if(o.songdata.file === k) { 1095 if( $.qtPlayerObj.playing ) { 1096 o.uniPlayer.seekTime(c); 1097 } else { 1098 if(false == qtInitialized){ 1099 i.doSpinner(true); 1100 i.initializeAudio(); 1101 qtPlayIsAllowed = true; 1102 setTimeout( 1103 p.play, 1104 200 1105 ); 1106 } else { 1107 qtPlayIsAllowed = true; 1108 p.play(); 1109 } 1110 } 1111 } else { 1112 console.log('Not this track'); 1113 } 1114 }); 1115 }, 1116 volBtn: function(){ 1117 var o = $.qtPlayerObj, 1118 i = o.interface, 1119 c = $("[data-qtmplayer-vcontrol]"); 1120 if( 0 === c.length ){ return; } 1121 var ol = c.offset().top, 1122 w = c.outerHeight(), 1123 ct = $("[data-qtmplayer-vtrack]"), // cue 1124 f = $("[data-qtmplayer-vfill]"), // fill 1125 m = $("[data-qtmplayer-vball]"), // fill 1126 off = c.offset().top, 1127 h = c.height(), 1128 vi = $('[data-qtmplayer-vicon]'), 1129 t, // top 1130 p = 100, // percentage 1131 tp = 100, // volume before muting to unmute 1132 d; // delta 1133 c.on("touchstart", vdragStart); 1134 c.on("touchend", vdragEnd); 1135 c.on("touchmove", vdrag); 1136 c.on("mousedown", vdragStart); 1137 c.on("mouseup", vdragEnd); 1138 c.on("mouseleave", vdragEnd); 1139 c.on("mousemove", vdrag); 1140 var vactive = false; 1141 var vcurrentX; 1142 var vcurrentY; 1143 var vinitialX; 1144 var vinitialY; 1145 var vxOffset = 0; 1146 var vyOffset = 0; 1147 var vdragItem = m; 1148 function vdragStart(e) { 1149 i.vdragging = true; 1150 vactive = true; 1151 m.addClass('qtmplayer-touch'); 1152 } 1153 function vdragEnd(e) { 1154 i.vdragging = false; 1155 vactive = false; 1156 m.removeClass('qtmplayer-touch'); 1157 } 1158 function vdrag(e) { 1159 off = c.offset().top - $(window).scrollTop(); 1160 if(vactive){ 1161 ol = c.offset().top; 1162 w = c.outerHeight(); 1163 if (e.type === "touchmove") { 1164 l = off - e.originalEvent.touches[0].pageY; 1165 } else { 1166 l = off - e.clientY; 1167 } 1168 vrelocate(100 - Math.abs(l) ); 1169 } 1170 1171 1172 } 1173 function vrelocate(l){ 1174 if(l < 0 ){ 1175 l = 0; 1176 } 1177 if(l > 95 ){ 1178 l = 100; 1179 } 1180 m.css({'top': 100 -l}); 1181 p = l; 1182 f.css({'height':p+'%'}); 1183 $.qtPlayerObj.uniPlayer.setVolume(p); 1184 1185 $('[data-proradio-volumeslider]').val(p) 1186 1187 var vi = $('[data-qtmplayer-vicon]'); 1188 if(p > 1){ 1189 if(p < 50){ 1190 vi.html('volume_down'); 1191 } else { 1192 vi.html('volume_up'); 1193 } 1194 } else { 1195 vi.html('volume_off'); 1196 } 1197 } 1198 $('body').on('click','[data-qtmplayer-vicon]', function(e){ 1199 e.preventDefault(); 1200 1201 if(p > 1){ 1202 tp = p; 1203 vrelocate(0); 1204 } else { 1205 vrelocate(tp); 1206 } 1207 e.stopPropagation(); 1208 }); 1209 // Boot setup start volume 1210 var mvol = $.qtPlayerObj.masterVolume; 1211 if(mvol !== 100){ 1212 $.qtPlayerObj.uniPlayer.setVolume( mvol ); 1213 vrelocate(mvol); 1214 } 1215 }, 1216 setDuration: function(text){ 1217 if(text === 'NaN:NaN' || text === '00:00'){ 1218 $("#qtmplayerDuration").html(); 1219 return; 1220 } 1221 $("#qtmplayerDuration").html(text); 1222 }, 1223 bufferStart: function(){ 1224 1225 $("#qtmplayerDuration").html('...'); 1226 $("#qtmplayer-buffer").show(); 1227 $('#qtMplayerMiniCue, #qtMplayerTadv').animate({'opacity':1}, 'fast' ).css({'pointer-events': 'none'}); 1228 }, 1229 bufferEnd: function(){ 1230 $("#qtmplayer-buffer").hide(); 1231 var returnAlive = setTimeout(function(){ 1232 $('#qtMplayerMiniCue, #qtMplayerTadv').css({'pointer-events': 'all'}); 1233 }, 300); 1234 1235 }, 1236 screenResize: function(){ 1237 var resizeTimer, 1238 o = $.qtPlayerObj, 1239 i = o.interface, 1240 w = i.window, 1241 ww = w.width(), 1242 wh = w.height(); 1243 w.on('resize', function() { 1244 clearTimeout(resizeTimer); 1245 resizeTimer = setTimeout(function() { 1246 if (w.width() !== ww || w.height() !== wh) { 1247 i.seekBtn(); 1248 $.qtMplayerPlaylistCue.init(); 1249 } 1250 1251 }, 100); 1252 }); 1253 }, 1254 initializeAudio: function() { 1255 var o = $.qtPlayerObj, 1256 i = o.interface; 1257 i.doSpinner(true); 1258 if(qtAnalyzer){ 1259 var hasAudioContext = false;
1260 try { 1261 hasAudioContext = window.AudioContext || window.webkitAudioContext; 1262 } catch(e) { 1263 if($.qtSMPO.init()){ 1264 qtInitialized = true; 1265 return true; 1266 }; 1267 } 1268 if(hasAudioContext !== false){ 1269 o.isSoundApi = true; 1270 if($.qtWebApiPlayer.init()){ 1271 qtInitialized = true; 1272 return true; 1273 } 1274 } 1275 } else { 1276 if($.qtSMPO.init()){ 1277 qtInitialized = true; 1278 return true; 1279 }; 1280 } 1281 }, 1282 resumeAudioOld: function(){ 1283 var o = $.qtPlayerObj, 1284 i = o.interface; 1285 i.initializeAudio(); // Appply new fixes 1286 qtPlayIsAllowed = true; 1287 if(i.autoplay){ 1288 setTimeout( 1289 o.uniPlayer.play, 1290 2200 1291 ); 1292 1293 } 1294 document.removeEventListener("click", i.resumeAudio); 1295 }, 1296 resumeAudio: function(){ 1297 // this seems to break the player by creating sometimes a parallel audio instance 1298 // return; 1299 1300 var o = $.qtPlayerObj, 1301 i = o.interface; 1302 i.log("resumeAudio A"); 1303 i.initializeAudio(); // Appply new fixes 1304 qtPlayIsAllowed = true; 1305 if(i.autoplay){ 1306 i.log("resumeAudio B"); 1307 setTimeout( 1308 function(){ 1309 i.btnPlay.click(); 1310 i.log("resumeAudio A1"); 1311 setTimeout( 1312 function(){ 1313 i.log("resumeAudio AB"); 1314 if(false === i.isMobile()){ 1315 i.log("resumeAudio AB 0"); 1316 } else { 1317 i.btnPlay.click(); 1318 i.log("resumeAudio AB 1"); 1319 } 1320 }, 1321 10 1322 ); 1323 }, 1324 2200 1325 ); 1326 } 1327 i.log("resumeAudio C"); 1328 document.removeEventListener("click", i.resumeAudio); 1329 1330 1331 }, 1332 triucco: function(){ 1333 var b = $('body'), 1334 i = $.qtPlayerObj.interface, 1335 t; 1336 $('#qtmusicplayer').addClass('qt-mplayer-mobile'); 1337 i.initializeAudio(); 1338 i.resumeAudio(); 1339 b.addClass("qt-mplayer-enabled"); 1340 i.log('mobile player enabled'); 1341 setTimeout( 1342 function(){ 1343 i.doSpinner(); 1344 }, 1345 1200 1346 ); 1347 1348 }, 1349 log: function(m){ 1350 var c = $("#qtmPlayerDebugger"); 1351 if(c.length > 0){ 1352 c.append(m+'<br>'); 1353 } 1354 }, 1355 1356 }, 1357 initPlayer: function(){ 1358 if(qtPlayDebug){ 1359 $('#qtmplayer-playlist').append('<div class="qtmplayer__debugger" id="qtmPlayerDebugger"><h5>Player Debug</h5></div>'); 1360 } 1361 if($('.qtmplayer__controllayer_noky').length > 0){ 1362 $('.qtmplayer__controllayer_noky').animate({opacity: 0.6},2000); 1363 return; 1364 } 1365 var o = $.qtPlayerObj, 1366 i = o.interface, 1367 c = i.controls, 1368 b = i.body, 1369 ot; 1370 o.songdata = {}; 1371 b.addClass("qtmplayer-enabled"); 1372 $(document).on("click", "[data-playlistopen]", function(){ 1373 b.toggleClass("qtmplayer-openplaylist"); 1374 }); 1375 b.on("click", "[data-playeropen]", function(){ 1376 b.toggleClass("qtmplayer-open"); 1377 }); 1378 c.find('.qtmplayer__cover').html('<img src="">'); 1379 i.qtmplayer.find('.qtmplayer__album').prepend('<img src="">'); 1380 1381 if( qtMplayerisMobile ){ 1382 i.triucco(); 1383 1384 } else { 1385 b.addClass("qt-mplayer-enabled"); 1386 } 1387 1388 i.preloadTrack(false); 1389 i.prevNext(); 1390 i.appendAlbum(); 1391 i.seekBtn(); 1392 i.volBtn(); 1393 i.bufferEnd(); 1394 i.skipCue(); 1395 i.screenResize(); 1396 c.mouseenter(function(){ 1397 c.addClass('open'); 1398 i.seekBtn(); 1399 clearTimeout(ot); 1400 }).mouseleave(function(){ 1401 ot = setTimeout(function() { 1402 c.removeClass('open'); 1403 }, c.data('hidetimeout')); 1404 }); 1405 1406 $('body').one('click', function(e) { 1407 1408 if( $(window).width() >= 1280 ){ 1409 1410 1411 // console.log('Autoplay test2'); 1412 var target = $(e.target).closest('a'); 1413 if(target){ 1414 // not('.qtmplayer__play, .qtmplayer-play, .proradio-btn--playmenu') 1415 if(target.hasClass('qtmplayer__play') || target.hasClass('qtmplayer-play') || target.hasClass('proradio-btn--playmenu')){ 1416 return; 1417 } 1418 } 1419 var closest = $(e.target).closest('a'); 1420 if(closest){ 1421 if(closest.hasClass('qtmplayer__play') || closest.hasClass('qtmplayer-play') || closest.hasClass('proradio-btn--playmenu')){ 1422 return; 1423 } 1424 } 1425 // console.log( $(e.target).closest('a').attr('class') ); 1426 if( $.qtPlayerObj.hasDoneAutoplay === false && $.qtPlayerObj.interface.autoplay ){ 1427 setTimeout(function(){ 1428 console.log('%c Pro.Radio player - do Autoplay! ', 'background: #030303; color: #bada55'); 1429 $('#qtmplayerPlay').click(); 1430 $.qtPlayerObj.hasDoneAutoplay = false;
1431 }, 500); 1432 } 1433 } 1434 }); 1435 1436 $('body').on('change', '[data-proradio-volumeslider]', function() { 1437 let mvol = $(this).val(); 1438 $.qtPlayerObj.uniPlayer.setVolume( mvol ); 1439 1440 $("[data-qtmplayer-vball]").css({'top': 100 - mvol}); 1441 $("[data-qtmplayer-vfill]").css({'height':mvol+'%'}); 1442 }); 1443 $('[data-proradio-volumeslider]').val( $.qtPlayerObj.masterVolume ); 1444 1445 1446 window.onresize = function(){ 1447 if($('body').hasClass('qtmplayer--page-popup')){ 1448 window.resizeTo(380,560); 1449 } 1450 } 1451 }, 1452 }; 1453 1454 1455 $(window).on('qtAjaxpageLoadEnd', function(){ 1456 // If player is paused and we open a channel page, load the channel first 1457 if( $('.proradio-infoajax') ){ 1458 if( $('.proradio-infoajax').data('proradio-posttype') == 'radiochannel' ){ 1459 var pageId = $('.proradio-infoajax').data('proradio-pageid'); 1460 if( $.qtPlayerObj.playing == false ){ 1461 if( $('*[data-qtmplayer-qtmpid="'+ pageId +'"]') ){ 1462 $('*[data-qtmplayer-qtmpid="'+ pageId +'"]').click(); 1463 } 1464 } 1465 } 1466 } 1467 // set volume 1468 $('[data-proradio-volumeslider]').val( $.qtPlayerObj.masterVolume ); 1469 }); 1470 1471 1472 $(document).ready(function() { 1473 if(0 === $('#qtmplayer-playlist li').length ){ 1474 return; 1475 } 1476 1477 $.qtPlayerObj.initPlayer(); 1478 }); 1479 1480 1481 1482 1483})(jQuery); 1484 1485 1486 1487
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.