1$(document).ready(function () { 2 3 function initializePlayerAPI(urlApi, callback) { 4 var tagPlayerApi = document.createElement('script'); 5 tagPlayerApi.src = urlApi; 6 if (callback) { 7 tagPlayerApi.addEventListener("load", callback); 8 } 9 var firstScriptTag = document.getElementsByTagName('script')[0]; 10 firstScriptTag.parentNode.insertBefore(tagPlayerApi, firstScriptTag); 11 } 12 13 matriz.utils.media = { 14 Playlist: function ($matrizMediaPlaylistContainer) { 15 var $matrizMediaPlayerContainer; 16 var $mediaCollection; 17 var $media; 18 19 function __construct() { 20 $mediaCollection = $matrizMediaPlaylistContainer.find(".matriz-media-list").children(); 21 $media = $mediaCollection.eq(0); 22 23 initializePlayer(); 24 initializeAction(); 25 } 26 27 function initializePlayer() { 28 $matrizMediaPlayerContainer = $matrizMediaPlaylistContainer.find(".matriz-media-player"); 29 $matrizMediaPlayerContainer.matrizMediaPlayer({ 30 listeners: { 31 onEnd: function () { 32 next(); 33 } 34 } 35 }); 36 } 37 38 function initializeAction() { 39 $mediaCollection.on("click", function () { 40 play($(this)); 41 }); 42 43 $matrizMediaPlaylistContainer.find("[data-matriz-action=first]").on("click", function () { 44 first(); 45 }); 46 47 $matrizMediaPlaylistContainer.find("[data-matriz-action=previous]").on("click", function () { 48 previous(); 49 }); 50 51 $matrizMediaPlaylistContainer.find("[data-matriz-action=next]").on("click", function () { 52 next(); 53 }); 54 55 $matrizMediaPlaylistContainer.find("[data-matriz-action=last]").on("click", function () { 56 last(); 57 }); 58 } 59 60 function play($mediaToPlay) { 61 if ($mediaToPlay.is("li")) { 62 $media.removeClass("matriz-ui-selected"); 63 $media = $mediaToPlay; 64 $media.addClass("matriz-ui-selected"); 65 66 var $mediaData = $mediaToPlay.find("a"); 67 68 $matrizMediaPlayerContainer.matrizMediaPlayer("play", {
69 "title": $mediaData.data("matriz-player-title"), 70 "subtitle": $mediaData.data("matriz-player-subtitle"), 71 "uri": $mediaData.data("matriz-player-uri"), 72 "mimetype": $mediaData.data("matriz-player-mimetype") 73 }); 74 } 75 } 76 77 function first() { 78 play($mediaCollection.first()); 79 } 80 81 function previous() { 82 play($media.prev()); 83 } 84 85 function next() { 86 play($media.next()); 87 } 88 89 function last() { 90 play($mediaCollection.last()); 91 } 92 93 __construct(); 94 }, 95 MimeType: function (mimeTemplate) { 96 var mimeParts = mimeTemplate.split("/"); 97 this.type = mimeParts[0]; 98 this.subtype = mimeParts[1]; 99 if (matriz.utils.media.MimeType.formats[this.type]) { 100 this.extension = matriz.utils.media.MimeType.formats[this.type].map[this.subtype]; 101 this.list = matriz.utils.media.MimeType.formats[this.type].list; 102 } 103 this.template = mimeTemplate; 104 }, 105 AbstractPlayer: function (el, options) { 106 options = options || {}; 107 options.listeners = options.listeners || {}; 108 109 var mediainfo; 110 var playerEl; 111 var playerPlugin; 112 var timeformat; 113 var defaultVolume; 114 var defaultTitle; 115 var defaultSubtitle; 116 var defaultDuration; 117 var ready = false; 118 var jpcmdqueue = { 119 queue: [], 120 dispatched: false, 121 enqueue: function (func) { 122 if (ready && this.dispatched) { 123 func(); 124 } else { 125 this.queue.push(func); 126 } 127 }, 128 dispatch: function () { 129 this.queue.reverse(); 130 for (var func = this.queue.pop(); func; func = this.queue.pop()) { 131 func(); 132 } 133 this.dispatched = true; 134 }, 135 clear: function () { 136 this.queue = []; 137 this.dispatched = false; 138 } 139 }; 140 141 function __construct() { 142 defaultVolume = getVolumeFromUI.call(this, $(el).find(".matriz-player
142-volume").width()); 143 timeformat = $(el).attr("data-matriz-player-time-format") ? $(el).attr("data-matriz-player-time-format") : "h:i:s"; 144 defaultTitle = $(el).attr("data-matriz-player-default-title") ? $(el).attr("data-matriz-player-default-title") : "-"; 145 defaultSubtitle = $(el).attr("data-matriz-player-default-subtitle") ? $(el).attr("data-matriz-player-default-subtitle") : "-"; 146 defaultDuration = $(el).attr("data-matriz-player-default-duration") ? $(el).attr("data-matriz-player-default-duration") : undefined; 147 initializeDOMMediaContainer.call(this); 148 initializeActions.call(this); 149 var _mediainfo = (options && options.mediainfo) ? options.mediainfo : getMediaInfoFromUI.call(this); 150 if (_mediainfo) { 151 this.load(_mediainfo); 152 } else { 153 showNoMediaActions.call(this); 154 } 155 } 156 157 function __destroy() { 158 jpcmdqueue.clear(); 159 if (playerPlugin !== undefined) { 160 playerPlugin.destroy(); 161 } 162 playerPlugin = undefined;
163 $(el).find(".matriz-player-media-container").empty(); 164 } 165 166 function formatTime(time, format) { 167 var formatedTimeParts = []; 168 var searchIdx = format.search(/'.*?'/); 169 var timeparts = format.replace(/'.*?'/g, ''); 170 while (searchIdx !== -1) { 171 var maskedPart = maskTime(format.substr(0, searchIdx - 1), time, timeparts); 172 var tmp = format.substr(searchIdx + 1); 173 var fi = tmp.search("'"); 174 var textPart = tmp.substr(0, fi); 175 formatedTimeParts.push(maskedPart, textPart); 176 format = tmp.substr(fi + 1); 177 searchIdx = format.search(/'.*?'/); 178 } 179 formatedTimeParts.push(maskTime(format, time, timeparts)); 180 return formatedTimeParts.join(''); 181 } 182 183 function getVolumeFromUI(volumeBound) { 184 if ($(el).find(".matriz-player__volume-bar").is(":visible")) { 185 return volumeBound / $(el).find(".matriz-player
185-volume").parent().width() * 100; 186 } else { 187 return 75; 188 } 189 } 190 191 function getMediaInfoFromUI() { 192 if ($(el).attr("data-matriz-player-uri")) { 193 return { 194 "mimetype": $(el).attr("data-matriz-player-mimetype"), 195 "title": $(el).find(".matriz-player-title").text(), 196 "subtitle": $(el).find(".matriz-player-subtitle").text(), 197 "uri": $(el).attr("data-matriz-player-uri"), 198 "duration": $(el).attr("data-matriz-player-duration") 199 }; 200 } else { 201 return undefined; 202 } 203 } 204 205 function initializeActions() { 206 $(el).find('[data-matriz-action="play"]').on("click", (function (e) { 207 this.play(); 208 }).bind(this)); 209 210 $(el).find('[data-matriz-action="pause"]').on("click", (function (e) { 211 this.pause(); 212 }).bind(this)); 213 214 $(el).find('[data-matriz-action="seek"]').on("click", (function (e) { 215 this.seek(e.offsetX / $("[data-matriz-action='seek']").width() * 100); 216 }).bind(this)); 217 218 $(el).find('[data-matriz-action="volume-on"]').on("click", (function (e) { 219 defaultVolume = getVolumeFromUI.call(this, $(el).find(".matriz-player
219-volume").width()); 220 this.changeVolume(0); 221 }).bind(this)); 222 223 $(el).find('[data-matriz-action="volume-off"]').on("click", (function (e) { 224 this.changeVolume(defaultVolume); 225 }).bind(this)); 226 227 $(el).find('[data-matriz-action="change-volume"]').on("click", (function (e) { 228 this.changeVolume(getVolumeFromUI.call(this, (e.offsetX || e.originalEvent.layerX))); 229 }).bind(this)); 230 231 $(el).find('.matriz-ui-player-volume-controls') 232 .on("mouseover", function () { 233 $(el).find('[data-matriz-action="change-volume"]').parent().show(); 234 }) 235 .on("mouseout", function () { 236 $(el).find('[data-matriz-action="change-volume"]').parent().hide(); 237 }); 238 239 $(el).find('[data-matriz-action="change-volume"]').parent().hide(); 240 } 241 242 function initializeDOMMediaContainer() {
243 if ($(el).find(".matriz-player-media-container").length === 0) { 244 playerEl = $("<div></div>").get(0); 245 $(playerEl).appendTo($(el)); 246 } else { 247 playerEl = $(el).find(".matriz-player-media-container").get(0); 248 } 249 } 250 251 function initializePlayerPlugin() { 252 jpcmdqueue.clear(); 253 if (playerPlugin !== undefined) { 254 playerPlugin.destroy(); 255 playerPlugin = undefined; 256 } 257 playerPlugin = matriz.utils.media.plugins.create({ 258 "playerEl": playerEl, 259 "playerType": this.type, 260 "player": this 261 }); 262 263 264 this.changeVolume(defaultVolume); 265 } 266 267 function maskTime(mask, time, timeparts) { 268 var hours = 0; 269 var minutes = 0; 270 var seconds = time; 271 272 if (timeparts.search("h") !== -1) { 273 hours = Math.floor(seconds / Math.pow(60, 2)); 274 seconds = seconds % Math.pow(60, 2); 275 } 276 277 if (timeparts.search("i") !== -1) { 278 minutes = Math.floor(seconds / 60); 279 seconds = seconds % 60; 280 } 281 282 mask = mask.replace("h", matriz.utils.string.pad(hours, 2, "0")); 283 mask = mask.replace("i", matriz.utils.string.pad(minutes, 2, "0")); 284 return mask.replace("s", matriz.utils.string.pad(Math.floor(seconds), 2, "0")); 285 } 286 287 function resetPlayerUI() { 288 showOnPauseActions.call(this);
289 $(el).find(".matriz-player-loaded-bar").css("width", "0%"); 290 $(el).find(".matriz-player-played-bar").css("width", "0%"); 291 } 292 293 function setMediaInfoInUI(mediainfo) { 294 $(el).attr("data-matriz-player-mimetype", mediainfo.mimetype.template); 295 $(el).find(".matriz-player-title").text(mediainfo.title); 296 $(el).find(".matriz-player-subtitle").text(mediainfo.subtitle); 297 $(el).attr("data-matriz-player-uri", mediainfo.uri); 298 } 299 300 function showNoMediaActions() { 301 showOnPauseActions.call(this); 302 $(el).find('[data-matriz-action="play"]').attr("disabled", true); 303 } 304 305 function showOnPlayActions() { 306 $(el).find('[data-matriz-action="pause"]').show(); 307 $(el).find('[data-matriz-action="play"]').hide(); 308 $(el).find('[data-matriz-action="play"]').attr("disabled", false); 309 } 310 311 function showOnPauseActions() { 312 $(el).find('[data-matriz-action="pause"]').hide(); 313 $(el).find('[data-matriz-action="play"]').show(); 314 $(el).find('[data-matriz-action="play"]').attr("disabled", false); 315 } 316 317 this.destroy = function () { 318 __destroy.call(this); 319 }; 320 321 this.load = function (_mediainfo) { 322 resetPlayerUI.call(this); 323 var mimetype = new matriz.utils.media.MimeType(_mediainfo.mimetype); 324 mediainfo = _mediainfo; 325 mediainfo.mimetype = mimetype; 326 if (mediainfo.duration === undefined) { 327 mediainfo.duration = -1; 328 } 329 defaultDuration = mediainfo.duration; 330 mediainfo.currenttime = -1; 331 mediainfo.percentloaded = 0; 332 setMediaInfoInUI.call(this, mediainfo); 333 initializePlayerPlugin.call(this); 334 jpcmdqueue.enqueue(function () { 335 playerPlugin.clear(); 336 playerPlugin.setMedia(mediainfo); 337 //playerPlugin.seek(0); 338 }); 339 }; 340 341 this.changeVolume = function (volumePercent) { 342 if (volumePercent === 0) { 343 $(el).find('[data-matriz-action="volume-on"]').hide(); 344 $(el).find('[data-matriz-action="volume-off"]').show(); 345 } else { 346 $(el).find('[data-matriz-action="volume-on"]').show(); 347 $(el).find('[data-matriz-action="volume-off"]').hide(); 348 }
349 $(el).find(".matriz-player-volume").css("width", volumePercent + "%"); 350 jpcmdqueue.enqueue(function () { 351 playerPlugin.changeVolume(volumePercent / 100); 352 }); 353 }; 354 355 this.clear = function () { 356 this.pause(); 357 resetPlayerUI.call(this); 358 $(el).find(".matriz-player-title").text(defaultTitle); 359 $(el).find(".matriz-player-subtitle").text(defaultSubtitle); 360 $(el).find(".matriz-player-total-time").text(formatTime.call(this, 0, timeformat)); 361 $(el).find(".matriz-player-current-time").text(formatTime.call(this, 0, timeformat)); 362 }; 363 364 this.onLoadedData = function (percentLoaded) { 365 mediainfo.percentloaded = percentLoaded; 366 $(el).find(".matriz-player-loaded-bar").css("width", mediainfo.percentloaded + "%"); 367 if (typeof options.listeners.onLoaded === "function") { 368 options.listeners.onLoaded(percentLoaded); 369 } 370 }; 371 372 this.getDefaultDuration = function () { 373 return defaultDuration; 374 }; 375 376 this.onDurationChange = function (duration) { 377 mediainfo.duration = duration; 378 defaultDuration = mediainfo.duration;
379 $(el).find(".matriz-player-total-time").text(formatTime.call(this, duration, timeformat)); 380 if (typeof options.listeners.onDurationChange === "function") { 381 options.listeners.onDurationChange(duration); 382 } 383 }; 384 385 this.onEnd = function () { 386 showOnPauseActions.call(this); 387 if (typeof options.listeners.onEnd === "function") { 388 options.listeners.onEnd(); 389 } 390 }; 391 392 this.onError = function (error) { 393 var msg = "Não é possÃvel reproduzir a mÃdia selecionada."; 394 if (error && error.message) { 395 msg = msg.concat(" " + error.message); 396 } 397 resetPlayerUI.call(this); 398 399 if (matriz.global.theme.uri == "/themes/admin") { 400 matriz.box.notify.danger(msg); 401 } else { 402 if (this.type == 'video') { 403 let midiaInfo = this.getMediaInfo(); 404 console.warn('Não é possÃvel reproduzir a mÃdia video. URI: ' + midiaInfo.uri); 405 } 406 } 407 if (typeof options.listeners.onError === "function") { 408 options.listeners.onError(error); 409 } 410 }; 411 412 this.onTimeUpdate = function (currentTime) { 413 mediainfo.currenttime = currentTime; 414 if (mediainfo.duration > -1) { 415 var currperc = mediainfo.currenttime / mediainfo.duration * 100;
416 $(el).find(".matriz-player-played-bar").css("width", currperc + "%"); 417 } 418 $(el).find(".matriz-player-current-time").text(formatTime.call(this, currentTime, timeformat)); 419 if (typeof options.listeners.onTimeUpdate === "function") { 420 options.listeners.onTimeUpdate(currentTime); 421 } 422 }; 423 424 this.onReady = function () { 425 ready = true; 426 jpcmdqueue.dispatch(); 427 if (typeof options.listeners.onReady === "function") { 428 options.listeners.onReady(); 429 } 430 }; 431 432 this.playing = function () { 433 return playerPlugin.isPlaying(); 434 }; 435 436 this.play = function (_mediainfo, seekfactor) { 437 if (_mediainfo) { 438 this.load(_mediainfo); 439 } 440 showOnPlayActions.call(this); 441 jpcmdqueue.enqueue(function () { 442 playerPlugin.play(seekfactor); 443 }); 444 matriz.common.events.trigger("matriz.media.player.play", [this]); 445 }; 446 447 this.onPlay = function() { 448 showOnPlayActions.call(this); 449 }; 450 451 this.pause = function (seekfactor) { 452 showOnPauseActions.call(this); 453 jpcmdqueue.enqueue(function () { 454 playerPlugin.pause(seekfactor); 455 }); 456 }; 457 458 this.onPause = function() { 459 showOnPauseActions.call(this); 460 }; 461 462 this.seek = function (seekPercent) { 463 var seekfactor = mediainfo.duration * (seekPercent / 100); 464 if (this.playing()) { 465 this.play(null, seekfactor); 466 } else { 467 this.pause(seekfactor); 468 } 469 }; 470 471 this.setListeners = function(listeners) { 472 options.listeners = listeners; 473 }; 474 475 this.isReady = function() { 476 return ready; 477 }; 478 479 this.getMediaInfo = function() { 480 return mediainfo; 481 }; 482 483 __construct.call(this); 484 }, 485 AudioPlayer: function (el, options) { 486 this.type = "audio"; 487 matriz.utils.media.AbstractPlayer.call(this, el, options); 488 }, 489 VideoPlayer: function (el, options) { 490 this.type = "video"; 491 matriz.utils.media.AbstractPlayer.call(this, el, options); 492 }, 493 plugins: { 494 JPlayer: function (options) { 495 var typelist = { 496 "audio": ["mp3", "ogg", "oga", "wav"], 497 "video": ["m4v", "ogv", "webmv"] 498 }; 499 var size = undefined;
500 if ($(options.playerEl).hasClass("matriz-player-media-container")) { 501 size = { 502 "width": "100%", 503 "height": "auto" 504 }; 505 } 506 507 $(options.playerEl).jPlayer({ 508 solution: "html, flash", 509 supplied: typelist[options.playerType].join(","), 510 swfPath: "/matriz_common/versions/" + matriz.global.version + "/js/jplayer/Jplayer.swf", 511 "size": size, 512 "ready": function (event) { 513 options.player.onReady(); 514 }, 515 durationchange: function (event) { 516 options.player.onDurationChange(event.jPlayer.status.duration); 517 }, 518 ended: function (event) { 519 options.player.onEnd(); 520 }, 521 error: function (event) { 522 console.warn(event.jPlayer.error); 523 524 switch (event.jPlayer.error.type) { 525 case "e_url": 526 options.player.onError({ 527 message: "O arquivo selecionado está corrompido ou não é válido." 528 }); 529 break; 530 case "e_no_solution": 531 options.player.onError({ 532 message: "O formato selecionado não pode ser executado." 533 }); 534 break; 535 default: 536 options.player.onError({ 537 message: "" 538 }); 539 break; 540 } 541 }, 542 progress: function (event) { 543 options.player.onLoadedData(event.jPlayer.status.seekPercent); 544 }, 545 timeupdate: function (event) { 546 options.player.onTimeUpdate.call(this, event.jPlayer.status.currentTime); 547 } 548 }); 549 550 this.changeVolume = function (volumePercent) { 551 $(options.playerEl).jPlayer("volume", volumePercent); 552 }; 553 554 this.clear = function () { 555 $(options.playerEl).jPlayer("clearMedia"); 556 }; 557 558 this.destroy = function () { 559 $(options.playerEl).jPlayer("destroy"); 560 }; 561 562 this.isPlaying = function () { 563 return !$(options.playerEl).data('jPlayer').status.paused; 564 }; 565 566 this.pause = function (position) { 567 $(options.playerEl).jPlayer("pause", position); 568 }; 569 570 this.play = function (position) { 571 $(options.playerEl).jPlayer("play", position); 572 }; 573 574 this.seek = function (position) { 575 $(options.playerEl).jPlayer("playHead", position); 576 }; 577 578 this.setMedia = function (mediainfo) { 579 var media = {}; 580 if (options.playerType == "video" && mediainfo.mimetype.extension == "octet-stream") { 581 var indexType = mediainfo.uri.split(".").slice(-1)[0]; 582 if (indexType.toLowerCase() in matriz.utils.media.MimeType.formats.video.map) { 583 mediainfo.mimetype.extension = matriz.utils.media.MimeType.formats.video.map[indexType]; 584 } 585 } 586 if (mediainfo.mimetype.extension) { 587 media[mediainfo.mimetype.extension] = mediainfo.uri; 588 } else { 589 var extensionList = matriz.utils.media.MimeType.formats[options.playerType].list; 590 var len = extensionList.length; 591 for (var i = 0; i < len; i++) { 592 media[extensionList[i]] = mediainfo.uri; 593 } 594 } 595 $(options.playerEl).jPlayer("setMedia", media); 596 }; 597 598 }, 599 GenericPlayer: function (options) { 600 var typelist = { 601 "audio": ["wma"], 602 "video": ["wmv", "mov", "avi", "swf"] 603 }; 604 var size = undefined;
605 if ($(options.playerEl).hasClass("matriz-player-media-container")) { 606 size = { 607 "width": "100%", 608 "height": "auto" 609 }; 610 } 611 612 this.changeVolume = function (volumePercent) { 613 }; 614 615 this.clear = function () { 616 }; 617 618 this.destroy = function () { 619 }; 620 621 this.isPlaying = function () { 622 }; 623 624 this.pause = function (position) { 625 }; 626 627 this.play = function (position) { 628 }; 629 630 this.seek = function (position) { 631 }; 632 633 this.setMedia = function (mediainfo) { 634 var media = {}; 635 if (mediainfo.mimetype.extension) { 636 media[mediainfo.mimetype.extension] = mediainfo.uri; 637 } else { 638 var extensionList = matriz.utils.media.MimeType.formats[options.playerType].list; 639 var len = extensionList.length; 640 for (var i = 0; i < len; i++) { 641 media[extensionList[i]] = mediainfo.uri; 642 } 643 } 644 $(options.playerEl).jPlayer("setMedia", media); 645 }; 646 $(options.playerEl).media(); 647 }, 648 YTPlayer: function (options) { 649 650 var player; 651 var size = undefined; 652 var enablePlayerStart = options.playerStart; 653
654 if ($(options.playerEl).hasClass("matriz-player-media-container")) { 655 size = { 656 "width": "100%", 657 "height": "auto" 658 }; 659 } 660 661 this.newPlayerInstance = function () { 662 var playerId = 'youtubeplayer-'.concat(Math.floor(Math.random() * 1000)); 663 $(options.playerEl).attr('id', playerId); 664 if (options.player.getDefaultDuration() > 0) { 665 options.player.onDurationChange(options.player.getDefaultDuration() - 1); 666 } 667 player = new YT.Player(playerId, { 668 height: size.height, 669 width: size.width, 670 videoId: options.videoId, 671 playerVars: { 672 controls: 0, 673 modestbranding: 1, 674 autoplay: 0, 675 disablekb: 0, 676 fs: 1, 677 iv_load_policy: 3, 678 origin: location.origin, 679 rel: 0, 680 showinfo: 0 681 }, 682 events: { 683 onReady: function () { 684 if (enablePlayerStart > 0) { 685 player.seekTo(options.playerStart, true); 686 } 687 options.player.onReady(); 688 options.player.onDurationChange(options.player.getDefaultDuration()); 689 }, 690 onError: function () { 691 options.player.onError({ message: "" }); 692 }, 693 onStateChange: function () { 694 if (player.getDuration() === 0) { 695 options.player.onDurationChange(options.player.getDefaultDuration()); 696 } else { 697 options.player.onDurationChange(player.getDuration()); 698 } 699 700 updateSeeker(); 701 702 switch (player.getPlayerState()) { 703 case YT.PlayerState.PLAYING: 704 options.player.onPlay(); 705 break; 706 case YT.PlayerState.PAUSED: 707 options.player.onPause(); 708 break; 709 case YT.PlayerState.ENDED: 710 options.player.onEnd(); 711 break; 712 } 713 } 714 } 715 }); 716 }; 717 718 var seekerTimeOut = null; 719 720 function updateSeeker() { 721 if (player !== undefined && player !== null) { 722 if ([YT.PlayerState.PLAYING, YT.PlayerState.BUFFERING].indexOf(player.getPlayerState()) !== -1) { 723 options.player.onLoadedData(player.getVideoLoadedFraction() * 100); 724 options.player.onTimeUpdate.call(this, player.getCurrentTime()); 725 726 if (seekerTimeOut !== null) { 727 clearTimeout(seekerTimeOut); 728 } 729 730 seekerTimeOut = setTimeout(updateSeeker, 500); 731 } 732 } 733 } 734 735 this.changeVolume = function (volumePercent) { 736 player.setVolume(volumePercent * 100); 737 }; 738 739 this.clear = function () { 740 player.clearVideo(); 741 }; 742 743 this.destroy = function () { 744 if (player !== undefined) { 745 player.destroy(); 746 player = undefined; 747 } 748 }; 749 750 this.isPlaying = function () { 751 return (player.getPlayerState() === YT.PlayerState.PLAYING); 752 }; 753 754 this.pause = function (position) { 755 if (position !== undefined) { 756 player.seekTo(position, true); 757 } 758 player.pauseVideo(); 759 }; 760 761 this.play = function (position) { 762 if (position !== undefined) { 763 player.seekTo(position, true); 764 } 765 player.playVideo(); 766 }; 767 768 this.seek = function (position) { 769 player.seekTo(position, true); 770 }; 771 772 this.setMedia = function (mediainfo) { 773 url = mediainfo.uri; 774 var videoid = url.match(/(?:https?:\/\/)?(?:www\.)?youtu(?:be)?\.(?:com|be)\/(?:watch\?v=|embed\/|v\/|live\/|shorts\/)?([a-zA-Z0-9_-]+)/); 775 if (videoid !== null) { 776 player.cueVideoById(videoid[1], enablePlayerStart); 777 } else { 778 options.player.onError({ 779 message: "A URL do arquivo de vÃdeo é inválida." 780 }); 781 } 782 }; 783 784 if (typeof YT !== "undefined") { 785 this.newPlayerInstance(); 786 } else { 787 $(window).on("YouTubeIframeAPIReady", (function () { 788 this.newPlayerInstance(); 789 }).bind(this)); 790 791 if (!window.iframeApi) { 792 window.iframeApi = true; 793 794 initializePlayerAPI("https://www.youtube.com/player_api", function () { 795 YT.ready(function () { 796 $(window).trigger("YouTubeIframeAPIReady"); 797 }); 798 }); 799 } 800 } 801 }, 802 VimeoPlayer: function (options) { 803 var player = undefined; 804 var $playerFrame = undefined; 805 var vimeoId = undefined; 806 var size = undefined; 807 var url = undefined; 808
809 if ($(options.playerEl).hasClass("matriz-player-media-container")) { 810 size = { 811 "width": "100%", 812 "height": "auto" 813 }; 814 } 815 816 this.initPlayer = function (videoid) { 817 vimeoId = videoid; 818 819 var playerId = 'vimeoplayer-'.concat(Math.floor(Math.random() * 1000)); 820 var url = 'https://player.vimeo.com/video/' + videoid + '?api=1&player_id=' + playerId; 821 //var url = 'https://player.vimeo.com/video/' + videoid + '?api=1&autoplay=0&vimeo_logo=0&fullscreen=0&pip=0&volume=0&progress_bar=0&controls=1&player_id=' + playerId; 822 823 $(options.playerEl).html('<iframe id="' + playerId + '" src="' + url + '" name="vimeoFrame" width="100%" height="auto" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen ></iframe>'); 824 $playerFrame = $('#'.concat(playerId)); 825 826 $(".matriz-player").hide(); 827 $(".video-responsive").css("padding-top", "0px"); 828 $(".video-responsive").find("iframe")[0].style.setProperty("height", "100%", "important"); 829 830 player = Froogaloop($playerFrame[0]); 831 player.addEvent('ready', (function () { 832 // pre ready bug 833 })); 834 835 $playerFrame.on('load', function () { 836 player.addEvent('ready', (function () { 837 options.player.onReady(); 838 options.player.onDurationChange(options.player.getDefaultDuration()); 839 })); 840 841 player.addEvent('loadProgress', function (data) { 842 options.player.onDurationChange(data.duration); 843 options.player.onLoadedData(data.percent * 100); 844 }); 845 846 player.addEvent('playProgress', function (data) { 847 options.player.onTimeUpdate.call(this, data.seconds); 848 }); 849 850 player.addEvent('play', function () { 851 options.player.onPlay(); 852 }); 853 854 player.addEvent('pause', function () { 855 options.player.onPause(); 856 }); 857 }); 858 }; 859 860 this.changeVolume = function (volumePercent) { 861 player.api('setVolume', volumePercent); 862 }; 863 864 this.clear = function () { 865 }; 866 867 this.destroy = function () { 868 if (typeof player !== "undefined") { 869 player = undefined; 870 } 871 }; 872 873 this.isPlaying = function () { 874 return (player.api('paused') === false); 875 }; 876 877 this.pause = function (position) { 878 if (position !== undefined) { 879 player.api('seekTo', position); 880 } 881 player.api('pause'); 882 }; 883 884 this.play = function (position) { 885 if (position !== undefined) { 886 player.api('seekTo', position); 887 } 888 player.api('play'); 889 }; 890 891 this.seek = function (position) { 892 player.api('seekTo', position); 893 }; 894 895 this.getVimeoId = function () { 896 var urlVideo = $(options.playerEl).parents("[data-matriz-player
896-uri]").attr('data-matriz-player-uri'); 897 var m = urlVideo.match(/^.+vimeo.com\/(.*\/)?([^#\?]*)/); 898 var videoid = m ? m[2] || m[1] : null; 899 return videoid; 900 } 901 902 this.setMedia = function (mediainfo) { 903 url = mediainfo.uri; 904 var m = url.match(/^.+vimeo.com\/(.*\/)?([^#\?]*)/); 905 var videoid = m ? m[2] || m[1] : null; 906 if (videoid !== null) { 907 if (videoid !== vimeoId) { 908 this.initPlayer(videoid); 909 } 910 } else { 911 options.player.onError({ 912 message: "A URL do arquivo de vÃdeo é inválida." 913 }); 914 } 915 }; 916 917 this.initPlayer(this.getVimeoId()); 918 }, 919 SoundCloudPlayer: function(options) { 920 var plugin = this; 921 var mediainfo = options.player.getMediaInfo(); 922 923 this.isPlaying = function () { 924 return false; 925 }; 926 927 this.resolve = function(url) { 928 if (matriz.global.theme.uri !== "/themes/admin") { 929 var urlRota = "/_service/soundcloud/resolve?url=" + url; 930 } else { 931 var urlRota = "/bibliotecas/midias/audios/soundcloud-resolve?url=" + url; 932 } 933 $.ajax({
934 url: urlRota 935 }).done(function(track) { 936 mediainfo.uri = track.uri; 937 mediainfo.mimetype = new matriz.utils.media.MimeType("audio/mp3"); 938 939 matriz.utils.media.plugins.JPlayer.call(plugin, { 940 "playerEl": options.playerEl, 941 "playerType": options.playerType, 942 "player": options.player 943 }); 944 945 }).fail(function(error, textStatus, errorThrown) { 946 if (matriz.global.theme.uri == "/themes/admin") { 947 matriz.ajax.messages.fail.default(error, textStatus, errorThrown); 948 } else { 949 console.warn('Não é possÃvel reproduzir a mÃdia áudio. URL: ' + mediainfo.uri); 950 } 951 }); 952 }; 953 954 this.resolve(mediainfo.uri); 955 }, 956 create: function (options) { 957 var urlMidi = $(options.playerEl).parents("[data-matriz-player
957-uri]").attr('data-matriz-player-uri'); 958 959 $(".matriz-player").show(); 960 $(".video-responsive").css("padding-top", "60px"); 961 if ($(".video-responsive").find("iframe").length) { 962 $(".video-responsive").find("iframe")[0].style.setProperty("height", "calc(100% - 2.25rem)", "important"); 963 } 964 965 if (urlMidi) { 966 var m = urlMidi.match(/^.+vimeo.com\/(.*\/)?([^#\?]*)/); 967 var videoid = m ? m[2] || m[1] : null; 968 if (videoid !== null) { 969 return new matriz.utils.media.plugins.VimeoPlayer({ 970 "playerEl": options.playerEl, 971 "playerType": options.playerType, 972 "player": options.player 973 }); 974 } 975 var videoid = urlMidi.match(/(?:https?:\/\/)?(?:www\.)?youtu(?:be)?\.(?:com|be)\/(?:watch\?v=|embed\/|v\/|live\/)?([a-zA-Z0-9_-]+)/); 976 if (videoid !== null) { 977 var reproducaoInicial = 0; 978 reproducaoInicial = extrairSegundosURLYoutube(urlMidi); 979 980 return new matriz.utils.media.plugins.YTPlayer({ 981 "playerEl": options.playerEl, 982 "playerType": options.playerType, 983 "player": options.player, 984 "videoId": videoid[1], 985 'playerStart': reproducaoInicial 986 }); 987 } 988 989 var isSoundCloud = urlMidi.match(/^.+soundcloud.com\/(.*)\/(.*)/); 990 if (isSoundCloud !== null) { 991 return new matriz.utils.media.plugins.SoundCloudPlayer({ 992 "playerEl": options.playerEl, 993 "playerType": options.playerType, 994 "player": options.player 995 }); 996 } 997 } 998 return new matriz.utils.media.plugins.JPlayer({ 999 "playerEl": options.playerEl, 1000 "playerType": options.playerType, 1001 "player": options.player 1002 }); 1003 } 1004 } 1005 }; 1006 1007 matriz.utils.media.MimeType.formats = { 1008 "audio": { 1009 "map": { 1010 "mpeg": "m4a", 1011 "mp3": "mp3", 1012 "m4a": "m4a", 1013 "mp4": "m4a", 1014 "ogg": "oga", 1015 "oga": "oga", 1016 "vnd.wave": "wav", 1017 "wma": "wma" 1018 }, 1019 "list": ["mp3", "m4a", "ogg", "oga", "wav"] 1020 }, 1021 "video": { 1022 "map": { 1023 "mp4": "m4v", 1024 "ogg": "ogv", 1025 "ogv": "ogv", 1026 "webm": "webmv", 1027 "wmv": "wmv", 1028 "mov": "mov", 1029 "avi": "avi", 1030 "swf": "swf" 1031 }, 1032 "list": ["m4v", "ogv", "webm", "wmv", "mov", "avi", "swf"] 1033 }, 1034 "application": { 1035 "map": { 1036 "octet-stream": "octet-stream" 1037 }, 1038 "list": ["octet-stream"] 1039 } 1040 }; 1041 1042 function parseArguments(args, playerType) { 1043 var parsedArguments = { 1044 "command": "", 1045 "options": undefined 1046 }; 1047 if (args.length > 0 && args.length < 3) { 1048 if (typeof args[0] === "string") { 1049 parsedArguments.command = args[0]; 1050 if (args.length > 1) { 1051 parsedArguments.options = args[1]; 1052 } 1053 return parsedArguments; 1054 } else if (typeof args[0] === "object") { 1055 parsedArguments.options = args[0]; 1056 return parsedArguments; 1057 } 1058 } else if (args.length === 0) { 1059 return parsedArguments; 1060 } 1061 throw new Error("matrizMediaPlayer: Parâmetros desconhecidos;"); 1062 } 1063 1064 function startPlayer(args, player, playerType) { 1065 var parsedArguments = parseArguments(args, playerType); 1066 var len = this.length; 1067 for (var i = 0; i < len; i++) { 1068 var newInstance = false; 1069 1070 if (this.get(i).instance === undefined) { 1071 newInstance = true; 1072 if (parsedArguments.command === "load") { 1073 parsedArguments.options = { 1074 mediainfo: parsedArguments.options 1075 }; 1076 } 1077 this.get(i).instance = new matriz.utils.media[player](this, parsedArguments.options); 1078 } 1079 1080 if (parsedArguments.command.length > 0) { 1081 if (newInstance !== true || parsedArguments.command !== "load") { 1082 this.get(i).instance[parsedArguments.command](parsedArguments.options); 1083 if (parsedArguments.command === "destroy") { 1084 this.get(i).instance = undefined; 1085 } 1086 } 1087 } 1088 } 1089 return this; 1090 } 1091 1092 $.fn.matrizMediaPlayer = function () { 1093 if ($(this).length > 0) {
1094 var type = $(this).attr("data-matriz-player-type"); 1095 var className = "".concat(type[0].toUpperCase(), type.substr(1).toLowerCase()).concat("Player"); 1096 return startPlayer.call(this, arguments, className); 1097 } else { 1098 return this; 1099 } 1100 }; 1101 1102 $.fn.matrizMediaPlaylist = function () { 1103 new matriz.utils.media.Playlist($(this)); 1104 }; 1105 1106 function extrairSegundosURLYoutube(url) { 1107 const match = url.match(/t=(\d+)/); 1108 if (match) { 1109 return parseInt(match[1], 10); 1110 } else { 1111 return 0; 1112 } 1113 } 1114});
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.