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