PageSourceSearch

https://fapergs.rs.gov.br/matriz_common/versions/2.1.5/js/procergs/matriz.utils.media.js?2.1.5.161.7+8

js fapergs.rs.gov.br collected 2026-10-02 14:40:21 UTC 47,117 bytes, 1,114 lines download raw bytes

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&amp;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.